3

私は正式に壁にぶつかりましたが、この問題の解決策がわかりません。どんな助けでも大歓迎です!array_intersect()を試しましたが、関数の最初の配列に対して実行され続けるだけで、機能しません。

無限の数の配列があります (デモンストレーションのために 4 つを示します)。たとえば、次のようになります。

// 1.
array(1,2,3,4,5);
// 2.
array(1,3,5);
// 3.
array(1,3,4,5);
// 4.
array(1,3,5,6,7,8,9);

すべての配列を検索し、4 つの配列すべてに存在する数字のみを見つける方法を理解する必要があります。この例では、配列から 1、3、および 5 の値のみを取り出す必要があります。

PS: 実際には、関数が多次元配列を検索して、配列内のすべての配列で一致する数値のみを抽出できれば最高です。

助けてくれてどうもありがとう!

4

5 に答える 5

1

楽しい質問!これはうまくいきました:

function arrayCommonFind($multiArray) {

    $result = $multiArray[0];
    $count = count($multiArray);
    for($i=1; $i<$count; $i++) {
        foreach($result as $key => $val) {
            if (!in_array($val, $multiArray[$i])) {
                unset($result[$key]);
            }
        }
    }
    return $result;
}

$multiArray[0] (または任意のサブ配列) をベースラインとして使用し、それに対して他のすべてをチェックできることに注意してください。最終結果に含まれる値は、すべての個々のサブ配列に含まれている必要があるためです。

于 2012-10-25T21:00:13.703 に答える
0

それが多次元配列にある場合は、

$multiDimensional = array(/* Your arrays*/);
$found = array_pop($multiDimensional);
foreach($multiDimensional as $subArray)
{
  foreach($found as $key=>$element)
  { 
    if(!in_array($element, $subArray)
    {
      unset($found[$key]);
    }
  }
}
于 2012-10-25T20:37:39.217 に答える
0

私の他の質問に対するあなたのコメントによると、ここではより良い解決策があります:

<?php
// 1. merge the arrays
$merged_arrays = array_merge( $arr1, $arr2, $arr3, $arr4, ...);
// 2. count the values
$merged_count = array_count_values( $merged_arrays );
// 3. sort the result for elements that only matched once
for( $merged_count as $key => $value ){
    if ($value == 1) {
        // 4. unset the values that didn't intersect
        unset($merged_count($key));
    }
}
// 5. print the resulting array
print_r( $merged_count );
于 2012-10-25T21:07:54.290 に答える
0

これはどう?

配列 1 と 2 の両方に存在する数字を見つけます。次に、これらの結果を配列 3 と比較して、共通の数字をもう一度見つけます。好きなだけ続けてください。

これはあなたが得ているものですか?

于 2012-10-25T20:43:32.133 に答える