【发布时间】:2010-04-22 18:14:08
【问题描述】:
我有一个数组如下
array(2) {
["operator"] => array(2) {
["qty"] => int(2)
["id"] => int(251)
}
["accessory209"] => array(2) {
["qty"] => int(1)
["id"] => int(209)
}
["accessory211"] => array(2) {
["qty"] => int(1)
["id"] => int(211)
}
}
我正在尝试找到一种方法来验证数组中是否存在 id 值并返回 bool。我试图找出一种不需要创建循环的快速方法。使用 in_array 函数不起作用,我还读到它很慢。
在 php 手册中有人推荐使用 flip_array() 然后 isset(),但我无法让它适用于二维数组。
做类似的事情
if($array['accessory']['id'] == 211)
也可以为我工作,但我需要匹配所有包含附件的键——不知道该怎么做
无论如何,我在兜圈子,需要一些帮助。 这似乎应该很容易。谢谢。
【问题讨论】:
-
我要建议的 PHP 函数之一是
array_walk_recursive,它不需要您执行循环。但是,如果您的key像您的那样具有数组值,则该功能不起作用。循环可能是唯一的方法。请问为什么没有循环? -
@Anthony Forloney:我有点困惑。这个函数应该完全符合 OP 的要求。你能更好地解释为什么它不起作用吗?我看到的唯一问题是,即使已经找到匹配项,它也会遍历所有值。
-
好吧,当我检查该值是否存在时,它已经遍历了要匹配的 id(包含在对象中)的所有值。我只是想减少搜索时间。
-
@Felix,我从网站上找到了这个:任何包含数组的键都不会传递给函数。而 OP 的数组具有包含数组的键。除非我误解了那句话,否则具有数组值的键似乎不会被传递到函数中,这不是他问题的答案。
-
@Anthony Forloney:是的,但这没关系。它以递归方式工作。保存数组的键不会传递给函数,这是真的。 但是这个(子)数组中的键被传递了。所以它完全按照你最初描述的方式工作。而不是例如
operator,子数组中的元素被传递(即qty,id),您可以检查它们。看看文档中的例子......但是由于OP只想搜索id,array_walk确实更容易。
标签: php multidimensional-array