-1

查看关联数组的数组以找到满足参数的节点的最有效方法是什么?

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

还是 for 循环是我得到的最好的东西?

例如

array(
[0] => array('name' => 'fred'),
[1] => array('name' => 'dave'),
[2] => array('name' => 'mike)
)

并且想要获取名称 == 'dave' 的数据节点,或者查看实际上是否存在一个元素名称设置为 'dave' 的节点。

例如类似的东西

isset($data[]['name'] == 'dave')
$info = getdata($data[]['name'] == 'dave')

(抱歉,如果我没有使用正确的技术术语,请纠正我,因为我喜欢学习!)

非常感谢您的任何建议!=)

4

3 回答 3

2

没有比循环更好的方法了。PHP 不能执行任何不涉及依次查看每个元素的魔法。

如果您经常这样做,它有助于按搜索条件索引您的数组:

$data = array(
    array('name' => 'Dave'),
    array('name' => ...)
);

$indexedData = array();
foreach ($data as $datum) {
    $indexedData[$datum['name']] = $datum;
}

$info = $indexedData['Dave'];

只要您的数据结构是次优的,就只有次优的方式来访问它。

于 2013-08-22T15:48:54.423 回答
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');
于 2013-08-22T15:51:38.130 回答
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 函数在数组中搜索值(这不是特定于索引的。即不受名称等限制)

于 2013-08-22T15:58:45.633 回答