[英]PHP - Searching in multidimensional array
我很痛苦,請指教。 我有以下情況:
我有下一個多維數組:
$numbers = array ( "one_digit" => array (1,2,3,4,5), "two_digits" => array (20,21,22,23,24,25), "three_digits" => array (301,302,303,304,304), "mixed_digits" => array (9,29,309,1) );
我需要一種在$ numbers數組中搜索以下內容的方法:
-搜索數字20是否在任何$ numbers數組中,並在找到的地方回顯。 $ find1 = m_array_search(“ 20”,$ numbers); echo“我在$ numbers的”。$ find1。“子數組中找到了搜索到的值”; 結果:“我在$ numbers的two_digits子數組中找到了搜索到的值”
-搜索數字1是否在任何$ numbers數組中,並在找到它的地方回顯。 $ find2 = m_array_search(“ 1”,$ numbers); echo“我在$ numbers的”。$ find2。“子數組中找到了搜索到的值”; 結果:“我在$ numbers的two_digits,mixed_digits個子數組中找到了搜索到的值”
因此,功能必須能夠發現一個或多個“子陣列”中的存在。 抱歉,如果我錯過了術語“子數組”
謝謝!!!
使用in_array
函數的簡單解決方案:
$search = 1;
$keys = [];
foreach ($numbers as $k => $v) {
if (is_array($v) && in_array($search, $v)) $keys[] = $k;
}
echo "I've found the searched value in ". implode(', ', $keys) ." subarray". ((count($keys) > 1)? "s":"") ." of \$numbers";
輸出:
I've found the searched value in one_digit, mixed_digits subarrays of $numbers
檢查一下,讓我知道是否對您有幫助。
<?php
function array_find_deep($array, $search, $keys = array())
{
foreach($array as $key => $value) {
if (is_array($value)) {
$sub = array_find_deep($value, $search, array_merge($keys, array($key)));
if (count($sub)) {
return $sub;
}
} elseif ($value === $search) {
return array_merge($keys, array($key));
}
}
return array();
}
$numbers = array (
"one_digit" => array (1,2,3,4,5),
"two_digits" => array (20,21,22,23,24,25),
"three_digits" => array (301,302,303,304,304),
"mixed_digits" => array (9,29,309,1)
);
var_dump(array_find_deep($numbers, 20));
var_dump(array_find_deep($numbers, 1));
var_dump(array_find_deep($numbers, 301));
var_dump(array_find_deep($numbers, 309));
?>
您可以將結果存儲在變量中,例如$result = array_find_deep($numbers, 20);
並嘗試echo $result[0]
,它將給出在哪個數組中找到該值的結果。
您可以使用array_search()循環嘗試-
$numbers = array (
"one_digit" => array (1,2,3,4,5),
"two_digits" => array (20,21,22,23,24,25),
"three_digits" => array (301,302,303,304,304),
"mixed_digits" => array (9,29,309,1)
);
function search_value($array, $value)
{
$result = array();
foreach($array as $key => $sub) {
// check if element present in sub array
if(array_search($value, $sub) !== false) {
// store the key
$result[] = $key;
}
}
return $result;
}
var_dump(search_value($numbers, 1));
var_dump(search_value($numbers, 5));
產量
array(2) {
[0]=>
string(9) "one_digit"
[1]=>
string(12) "mixed_digits"
}
array(1) {
[0]=>
string(9) "one_digit"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.