查看关联数组数组的最有效方法是什么,找到符合参数的节点?
我希望有一种更有效的方式来查看数组以查找并返回父节点,只是循环查看 - 查看每个元素并返回匹配。 (也可以安全地假设,没有重复的数据 - 所以第一次发现,是唯一找到的数据)
或者for循环是我得到的最好的东西?
e.g。
array(
[0] => array('name' => 'fred'),
[1] => array('name' => 'dave'),
[2] => array('name' => 'mike)
)
想要获取名称=='dave'的数据节点,或者查看是否存在将元素名称设置为'dave'的节点。
e.g。像
这样的东西isset($data[]['name'] == 'dave')
$info = getdata($data[]['name'] == 'dave')
(如果我没有使用正确的技术术语,请道歉,请按照我的学习方式纠正我!)
非常感谢任何建议! =)
答案 0 :(得分:2)
没有比循环更好的方法了。 PHP不能执行任何不涉及依次查看每个元素的魔法。
如果您经常这样做,按搜索条件索引数组会很有帮助:
$data = array(
array('name' => 'Dave'),
array('name' => ...)
);
$indexedData = array();
foreach ($data as $datum) {
$indexedData[$datum['name']] = $datum;
}
$info = $indexedData['Dave'];
只要您的数据结构不是最佳的,就只有次优的方式来访问它。
答案 1 :(得分:0)
这是一个数组递归到一个级别的函数。我们使用foreach()
遍历每个第二层子数组,然后使用内置函数array_search
来查看它是否存在。
function as_nested($needle,$haystack){
$val;
foreach($haystack as $key=>$arr){
$arr_key = array_search($needle,$haystack[$key]);
if(!empty($arr_key)){
$val = $key;
}
}
return $val;
}
要执行,请提供针头,然后是大海捞针。
echo as_nested('dave',$myArray);
使用您的初始数组的 输出为1
。
$myArray[0] = array('name'=>'fred');
$myArray[1] = array('name' => 'dave');
$myArray[2] = array('name' => 'mike');
答案 2 :(得分:0)
php中有一个名为in_array()
的函数,用于查找数组中的值。
//Code credit to @deceze
$data = array(
array('name' => 'Dave'),
array('name' => ...)
);
function getData($data, $searchValue) {
foreach ($data as $datum) {
if (in_array($searchValue, $datum)) {
return $datum;
}
}
//array returned when $searchValue is found.
您可以使用getData函数搜索数组中的值(这不是特定于索引的。即不受名称限制等。)