当前位置: 首页 > 面试题库 >

如何在PHP中通过多维数组中的key => value搜索

扈德容
2023-03-14
问题内容

有没有一种快速的方法来获取在多维数组中找到键值对的所有子数组?我不能说阵列的深度。

简单示例数组:

$arr = array(0 => array(id=>1,name=>"cat 1"),
             1 => array(id=>2,name=>"cat 2"),
             2 => array(id=>3,name=>"cat 1")
);

当我搜索key = name和value =“ cat 1”时,该函数应返回:

array(0 => array(id=>1,name=>"cat 1"),
      1 => array(id=>3,name=>"cat 1")
);

我猜想函数必须是递归的才能深入到最深层次。


问题答案:

码:

function search($array, $key, $value)
{
    $results = array();

    if (is_array($array)) {
        if (isset($array[$key]) && $array[$key] == $value) {
            $results[] = $array;
        }

        foreach ($array as $subarray) {
            $results = array_merge($results, search($subarray, $key, $value));
        }
    }

    return $results;
}

$arr = array(0 => array(id=>1,name=>"cat 1"),
             1 => array(id=>2,name=>"cat 2"),
             2 => array(id=>3,name=>"cat 1"));

print_r(search($arr, 'name', 'cat 1'));

输出:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => cat 1
        )

    [1] => Array
        (
            [id] => 3
            [name] => cat 1
        )

)

如果效率很重要,则可以编写效率代码,以便所有递归调用将其结果存储在同一临时$results数组中,而不是将数组合并在一起,如下所示:

function search($array, $key, $value)
{
    $results = array();
    search_r($array, $key, $value, $results);
    return $results;
}

function search_r($array, $key, $value, &$results)
{
    if (!is_array($array)) {
        return;
    }

    if (isset($array[$key]) && $array[$key] == $value) {
        $results[] = $array;
    }

    foreach ($array as $subarray) {
        search_r($subarray, $key, $value, $results);
    }
}

这里的关键是search_r通过引用而不是值来获取其第四个参数。“&”号&至关重要。

仅供参考:如果您使用的是旧版PHP,则必须在的 调用
search_r而不是在其声明中指定传递引用部分。也就是说,最后一行变为search_r($subarray, $key, $value, &$results)



 类似资料:
  • 问题内容: 我有一个php表单,该表单具有已知的列数(例如,顶部直径,底部直径,织物,颜色,数量),但是行数未知,因为用户可以根据需要添加行。 我发现了如何采用每个字段(列)并将其放入各自的数组中。 因此,我最终在HTML中得到的是: 我现在想做的是将所有行和列都放入多维数组,然后将其内容通过电子邮件发送给客户端(最好在格式良好的表中)。我还无法真正理解如何将所有这些输入和选择组合到一个不错的数组

  • 问题内容: 我有一个要在其中搜索并获取数组键的数组。 例子 假设我们有以下二维数组: 函数调用(第一个用户的uid)应返回。 函数调用应返回。 我尝试进行循环,但是我想要更快的执行代码。 问题答案: function searchForId($id, $array) { foreach ($array as $key => $val) { if ($val[‘uid’] === $id) { re

  • 我有一个数组,我想在其中搜索,并获取数组的键。 假设我们有以下2维数组: 函数调用(第一个用户的uid)应返回。 函数调用应该返回。 我试着做循环,但我想要一个执行速度更快的代码。

  • 问题内容: 我有一个JSON数组 我将如何搜索8097并获取内容? 问题答案: 使用该函数将JSON字符串转换为对象数组,然后遍历该数组直到找到所需的对象:

  • 我开发了一个程序,获取包含用户id及其技能的用户技能数组,该数组如下: 关键是user_id,值是技能数组,现在我想搜索有两个值的user_id:english或word,我希望返回17,16,我该怎么做,谢谢你的帮助:)

  • 问题内容: 我有这种数组 我需要做的是基于数组的[x] [4](Unix时间戳值)对数组进行排序。我将如何实现? 问题答案: 使用比较函数,在这种情况下,它将比较数组的unix时间戳值: 然后使用如下 函数调用它: 该函数将使用用户提供的比较函数按其值对数组进行排序。如果您希望排序的数组需要按照一些非平凡的条件进行排序,则应使用此函数。 取自 PHP:usort 手册。