我有一個關聯數組,我需要找到一個鍵的數字位置。 我可以通過手動循環查找數組,但有沒有更好的方法構建到PHP中?php - 獲取關聯數組的數字索引
$a = array(
'blue' => 'nice',
'car' => 'fast',
'number' => 'none'
);
// echo (find numeric index of $a['car']); // output: 1
我有一個關聯數組,我需要找到一個鍵的數字位置。 我可以通過手動循環查找數組,但有沒有更好的方法構建到PHP中?php - 獲取關聯數組的數字索引
$a = array(
'blue' => 'nice',
'car' => 'fast',
'number' => 'none'
);
// echo (find numeric index of $a['car']); // output: 1
echo array_search("car",array_keys($a));
$blue_keys = array_search("blue", array_keys($a));
+1救了我5個時刻谷歌進行搜索該功能,我用了輸入此評論。 – 2012-12-15 21:07:53
一個解決方案,我想出了...可能非常低效相比壽Fosco的解決方案:
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++;
}
}
}
$a = array(
'blue' => 'nice',
'car' => 'fast',
'number' => 'none'
);
var_dump(array_search('car', array_keys($a)));
var_dump(array_search('blue', array_keys($a)));
var_dump(array_search('number', array_keys($a)));
function arrayValuePosition($value, $array)
{
return array_search($value, array_keys($array));
}
儘管Fosco的回答沒有錯,但有一個案例被認爲是與這一個:混合陣列。想象一下,我有一個這樣的數組:
$a = array(
"nice",
"car" => "fast",
"none"
);
現在,PHP允許這種語法,但它有一個問題:如果我跑Fosco的代碼,我得到0
這是我的錯,但爲什麼出現這種情況?做字符串和整數PHP字符串轉換爲整數(這在我看來有點傻)之間進行比較時,
因爲如此,當array_search()
搜索索引停靠在第一個,因爲顯然("car" == 0)
是真的。
設置array_search()
以嚴格的方式並不能解決問題,因爲那麼array_search("0", array_keys($a))
將返回即使索引爲0的元素存在虛假。
所以我的解決方案只是將來自array_keys()
爲字符串的所有索引,然後將它們正確地進行比較:
echo array_search("car", array_map("strval", array_keys($a)));
打印1
這是正確的
當傳遞一個變量時,你也應該把它轉換爲一個字符串,因爲將零傳遞給一個關聯數組會產生相同的負面影響。例如:'var_dump(array_search(0,array_map(「strval」,array_keys($ a))));'將總是輸出'int(0)',而不是'bool(false)'。 – 2018-03-07 02:02:10
PHP是否保證關聯數組的順序? – 2012-05-01 21:50:52
@KevinBurke除非使用排序功能,否則不會重新排序它。不知道你在尋找什麼樣的保證,但它不像JavaScript模型那樣沒有關聯數組的靜態順序。 – Fosco 2012-05-01 23:20:45
「array_keys」給出的索引不一定匹配原始數組的索引。例如,如果通過使用「unset」或其他許多函數來更改數組,則原始數組的索引中將留有間隙,但array_keys將生成一個新數組。 – SEoF 2013-02-13 14:49:22