3

次のような配列があるとします。

$array = array("a","b","c","d","a","a");

値が「a」のすべてのキーを取得したいと思います。

私はwhileループを使用してそれらを取得できることを知っています:

while ($a = current($array)) {
    if ($a == 'a') {
        echo key($array).',';
    }
    next($array);
}

foreach代わりにループを使用してそれらを取得するにはどうすればよいですか?

私はもう試した:

   foreach ($array as $a) {
        if ($a == 'a') {
            echo key($array).',';
        }

    }

そして私は得た

1,1,1、

結果として。

4

4 に答える 4

6

特定の値のすべてのキーが必要な場合はarray_keys、オプションのsearch_valueパラメーターを使用して、を使用することをお勧めします。

$input = array("Foo" => "X", "Bar" => "X", "Fizz" => "O");
$result = array_keys( $input, "X" );

どこ$resultになります

Array ( 
  [0] => Foo 
  [1] => Bar 
)

を使用する場合はforeach、各キー/値セットを反復処理して、値が検索に一致したときに新しい配列コレクションにキーを追加できます。

$array = array("a","b","c","d","a","a");
$keys = array();

foreach ( $array as $key => $value )
  $value === "a" && array_push( $keys, $key );

どこ$keysになります

Array ( 
  [0] => 0 
  [1] => 4 
  [2] => 5 
)
于 2012-04-07T06:24:20.823 に答える
1

以下を使用して、特定の値のキーを印刷できます


foreach ($array as $key=>$val) {
        if ($val == 'a') {
            echo $key." ";
        }

    }

于 2012-04-07T06:27:29.840 に答える
0

使用する

foreach($array as $key=>$val)
{
  //access the $key as key.
}
于 2012-04-07T06:41:11.270 に答える
0

これがより単純なフィルターです。

$query = "a";
$result = array_keys(array_filter($array,
    function($element)use($query){
        if($element==$query) return true;
    }
));
于 2012-04-07T06:41:37.997 に答える