0

重複の可能性:
多次元配列で値を検索する

これは私の配列で、キーと値のペアの配列が含まれています。

[
   {
    valueA: 0,
    valueB: 0,
    day: "2010-04-09"
   },
   {
    valueA: 0,
    valueB: 0,
    day: "2010-04-10"
   }
]

特定の値が任意のインデックスのキー「日」にあるかどうかを確認したい (そうであれば、そのノードの値を変更します)

メソッドでこれを行う効率的な方法はありin_arrayますか?

それ以外の場合は、ネストされた for ループで行うと思います

4

3 に答える 3

1

1 回だけループし、日付をキーとして設定する

$hash = array();
foreach ( $array as $v ) {
    $hash[$v['day']][] = $v;
}

これで、常にissetではO(1)なくどちらを使用できますかO(n)

if (isset($hash['2010-04-10'])) {
    echo "Here";
}
于 2013-02-04T17:07:18.280 に答える
1

関数ではありませんが、in_array使用できますarray_filter

// assuming $myarray = Array(......);
if( $found = array_filter($myarray,function($a) {return $a['day'] == '2010-04-10';})) {
    // you can now do something with the $found array
}

編集: PHP 5.2.2 の使用に関するあなたのコメントを見ました - このバージョンは匿名関数をサポートしていないため、これが必要になります:

if( $found = array_filter($myarray,create_function('$a','return $a["day"] == "2010-04-10";')))
于 2013-02-04T17:03:33.320 に答える
0

代わりに array_map を使用します。これにより、キーが一致したときに配列を変更できます。array_filter は、配列の作成のみを許可します。

(5.2 と create_function を使用して) 新しいメソッドを作成する場合は、その中でロジックを指定できます。次に、それを array_map メソッドに渡して、新しく処理された配列を取得します。

以下の例では、変数の「日」が「2010-04-10」であるかどうかを確認しています。そうであれば、その特定の配列の valueA を 1 に変更します。

$processArrayFunction = create_function('$a',
                                        'if ($a["day"] == "2010-04-10") {
                                            $a["valueA"] = 1;
                                        }
                                        return $a;
                                        ');

$newArray = array_map($processArrayFunction, $sourceArray);
于 2013-02-04T17:19:10.930 に答える