查找嵌套数组元素,返回节点(最有效的方法)

时间:2013-08-22 15:16:39

标签: php arrays performance

查看关联数组数组的最有效方法是什么,找到符合参数的节点?

我希望有一种更有效的方式来查看数组以查找并返回父节点,只是循环查看 - 查看每个元素并返回匹配。 (也可以安全地假设,没有重复的数据 - 所以第一次发现,是唯一找到的数据)

或者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')

(如果我没有使用正确的技术术语,请道歉,请按照我的学习方式纠正我!)

非常感谢任何建议! =)

3 个答案:

答案 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函数搜索数组中的值(这不是特定于索引的。即不受名称限制等。)