0

私は配列を持っています。それを $mainArray と呼びましょう。これは次のようになります: -

Array
(
    [1] => Array
    (
    )

    [5] => Array
    (
        [0] => 10
        [1] => 15
        [2] => 20
        [3] => 25
    )

    [80] => Array
    (
        [0] => 20
        [1] => 40
        [2] => 50
        [3] => 60
    )

    [777] => Array
    (
        [0] => 100
        [1] => 200
        [2] => 300
        [3] => 400
    )

    [666] => Array
    (
        [0] => 1234
        [1] => 5678
        [2] => 20
        [3] => 9865
    )

    [555] => Array
    (
        [0] => 111
        [1] => 222
        [2] => 333
        [3] => 444
    )

)

私がやりたいことは、2 つの新しい配列を作成することです: -

1) 値は $mainArray のキー名と同じですが、サブ配列 (存在する場合) のどこかに値 "20" が含まれているもののみです。たとえば、私の新しい配列 ($arrayOne と呼びます) は [0] => 5、[1] => 80、[2] => 666 になります。

2) 上記と同様ですが、サブ配列がないか、ある場合でも値として「20」が含まれていません。したがって、($arrayTwo と呼びます) は [0] => 1、[1] => 777、[2] =>555 になります。

for each ループを何度も試しましたが、RecursiveIteratorIterator (それが何であれ!) も少し試してみましたが、必要な方法でキーと値を参照できないようです。どんな助けでも大歓迎です!

4

3 に答える 3

0

配列の値として 20 が含まれているかどうかを確認する関数を作成できると思います。この関数を と呼びましょうhas20

あなたの2つの新しい配列はarray_filter($mainArray, 'has20')array_filter($mainArray, function ($x) {return !has20($x);})

于 2013-09-26T17:52:28.303 に答える
0

次のように実行できます。

$newArray = array();
foreach($mainArray as $key => $subArray) {
  if (in_array(20, $subArray)) {
    $newArray[] = $key;
  }
}
于 2013-09-26T17:53:15.490 に答える
0

これでうまくいきますか?:

<?php

    foreach( $mainArray as $mKey => &$mVal )
    {
        if( in_array( 20, $mVal ) )
        {
            $arrayOne[] = $mKey;
        }
        else
        {
            $arrayTwo[] = $mKey;
        }
    }
于 2013-09-26T17:51:12.977 に答える