2

配列要素のサブ配列を検索して特定のキーの値を確認する最も効率的な方法は何ですか? たとえば、次の配列が与えられた場合、両方のサブ配列の「msg」値をチェックし、どちらかが入力されている場合はブール値の結果を返します。

[TGMN02] => Array
        (
            [2] => Array
                (
                    [id] => 93143
                    [msg] => 
                )

            [3] => Array
                (
                    [id] => 24876
                    [msg] => 
                )
        )

私が今持っているのは、単純にループしてチェックしているだけで、かなりぎこちなく感じます。

4

2 に答える 2

0

「最も」効率的かどうかはわかりませんが、見つかった最初の値でループを破るため、必ずしも配列全体を反復処理する必要はないため、技術的にはより効率的です。

 function hasMsg($a){
   foreach($a as $b)
     if(!empty($b['msg'])) return true;
   return false;
 }

わかりました...いくつかの貧弱なコメントには代替の提案が付随していなかったので-PHP> 5.3を使用してみてください-それがどのように効率的かはわかりません-それでも、あるレベルで配列をループする必要があります(しかし、PHP インタープリターの内部動作については 100% 確信が持てません。おそらく、処理を高速化できる内部マジックがあるのでしょう)。

$hasMsg = !!(count(array_filter($a,function($b){ return !empty($b['msg']); })));

...どちらかというと効率的ではありません。 配列を「ループ」することに問題はありません。これは、デジタル時代の黎明期から (ほぼ) 使用されてきた、試行錯誤された言語構造です。

于 2013-03-21T12:45:42.537 に答える
-1

最初にいくつかのカスタム func を作成し、それを array_walk_recursive(array &$input , callable $funcname [, mixed $userdata = NULL ]) 関数で使用してみます。PHP マニュアル.

于 2013-03-21T14:42:37.667 に答える