我有一个嵌套数组,我想知道如何在其中查找元素。
这是数组:
$test = [
['item_id' => 780, 'quantity' => 1],
['item_id' => 759, 'quantity' => 3],
['item_id' => 453, 'quantity' => 12]
];
我确实设法使用foreaech
循环,但想知道是否有更好的方法?
foreach($test as $t) {
if($t['item_id']==780) echo $t['quantity'];
}
答案 0 :(得分:0)
如果数组已经排序,你可以在O(log n)时间内完成,但如果没有,你必须搜索所有元素,直到找到它为止,这是O(n)时间。如果数组没有排序,我认为迭代它们是唯一的方法。如果存在对数组进行预排序的选项,则可能会更快。
编辑:如果可以更改数据结构,那么这将为更快的算法开辟很多可能性,但我认为这不是这种情况。
答案 1 :(得分:0)
递归使用in_array:
function in_array_r($needle, $haystack, $strict = false) {
foreach ($haystack as $item) {
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
return true;
}
}
return false;
}
$arr = array(array('item_id'=>2132,'quantity'=>1),array('item_id'=>759,'quantity'=>3),array('item_id'=>453,'quantity'=>12));
echo in_array_r("2132", $arr) ? 'found' : 'not found';
答案 2 :(得分:0)
所以基本上你正在寻找嵌套数组中的关键功能搜索。
Here是一个很好的答案:)