-1

パラメータを満たすノードを見つけるために、連想配列の配列を調べる最も効率的な方法は何でしょうか?

配列を調べて親ノードを見つけて返す、より効率的な方法が必要です。ループするだけです-各要素を見て、一致した場合に返します。(また、データの重複はないと仮定しても安全です。そのため、最初に見つかったものだけが見つかりました)

それとも、for ループは私が得た最高のものですか?

例えば

array(
[0] => array('name' => 'fred'),
[1] => array('name' => 'dave'),
[2] => array('name' => 'mike)
)

そして、名前 == 'dave' であるデータのノードを取得したい、または要素名が 'dave' に設定されているノードが実際に存在するかどうかを確認したい。

たとえば、次のような

isset($data[]['name'] == 'dave')
$info = getdata($data[]['name'] == 'dave')

(正しい専門用語を使用していない場合は申し訳ありませんが、私は学ぶことが好きなので、訂正してください!)

アドバイスをよろしくお願いします!=)

4

3 に答える 3

2

ループするより良い方法はありません。PHP は、各要素を順番に調べることを伴わない魔法を実行することはできません。

これを頻繁に行う場合は、検索基準で配列にインデックスを付けると役立ちます。

$data = array(
    array('name' => 'Dave'),
    array('name' => ...)
);

$indexedData = array();
foreach ($data as $datum) {
    $indexedData[$datum['name']] = $datum;
}

$info = $indexedData['Dave'];

データ構造が最適ではない限り、それにアクセスする方法は最適ではありません。

于 2013-08-22T15:48:54.423 に答える
0

これは、配列を 1 レベルに再帰する関数です。foreach()子配列の各 2 番目の層をループしてから、組み込み関数を使用してarray_search存在するかどうかを確認します。

    function as_nested($needle,$haystack){
    $val;
        foreach($haystack as $key=>$arr){
            $arr_key = array_search($needle,$haystack[$key]);
            if(!empty($arr_key)){
             $val = $key;
            }
        }
     return $val;
    }

実行するには、針を供給し、次に干し草の山を供給します。

echo as_nested('dave',$myArray);

初期配列を使用した出力1はです。

    $myArray[0] = array('name'=>'fred');
    $myArray[1] = array('name' => 'dave');
    $myArray[2] = array('name' => 'mike');
于 2013-08-22T15:51:38.130 に答える