回答:
echo array_search("car",array_keys($a));
array("val1", "val2", "car" => "val3")
ている場合は機能しません0
。
$blue_keys = array_search("blue", array_keys($a));
function arrayValuePosition($value, $array)
{
return array_search($value, array_keys($array));
}
Foscoの答えは間違いではありませんが、これについては考慮すべきケースがあります:混合配列です。次のような配列があるとします。
$a = array(
"nice",
"car" => "fast",
"none"
);
現在、PHPはこの種の構文を許可していますが、1つの問題があります。Foscoのコードを実行0
すると、間違っているのですが、なぜこれが起こるのでしょうか。
文字列と整数間の比較やってたときなので、整数にPHPの変換文字列を(これは私の意見ではちょっと愚かである)、そのときarray_search()
には最初のもので、インデックスの検索を停止して明らかにので("car" == 0)
本当です。strictモードに
設定array_search()
しても問題は解決しませんarray_search("0", array_keys($a))
。インデックス0の要素が存在する場合でもfalseが返されるためです。
したがって、私の解決策は、すべてのインデックスをarray_keys()
から文字列に変換し、それらを正しく比較するだけです。
echo array_search("car", array_map("strval", array_keys($a)));
Prints 1
、これは正しいです。
編集:
ショーンが以下のコメントで指摘したように、次のようなintインデックスを検索した場合、同じことがインデックス値に適用されます。
$a = array(
"foo" => "bar",
"nice",
"car" => "fast",
"none"
);
$ind = 0;
echo array_search($ind, array_map("strval", array_keys($a)));
常にを取得しますが0
、これは誤りです。解決策は、インデックスを(変数を使用する場合)次のような文字列にキャストすることです。
$ind = 0;
echo array_search((string)$ind, array_map("strval", array_keys($a)));
var_dump(array_search(0, array_map("strval", array_keys($a))));
常にが出力されます。int (0)
bool (false)
私が思いついた解決策...おそらくフォスコの解決策と比較してかなり非効率的です:
protected function getFirstPosition(array$array, $content, $key = true) {
$index = 0;
if ($key) {
foreach ($array as $key => $value) {
if ($key == $content) {
return $index;
}
$index++;
}
} else {
foreach ($array as $key => $value) {
if ($value == $content) {
return $index;
}
$index++;
}
}
}
array_search
、が最初にソートを行うため、おそらく非常に高速で、非常に遅くなります。