首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PHP中通过多维数组中的key=>value进行搜索

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

Stack Overflow用户
提问于 2009-06-20 01:19:57
回答 15查看 335.6K关注 0票数 158

有没有什么快速的方法可以在多维数组中找到键值对的所有子数组?我不能说数组会有多深。

简单的数组示例:

代码语言:javascript
复制
$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“时,函数应该返回:

代码语言:javascript
复制
array(0 => array(id=>1,name=>"cat 1"),
      1 => array(id=>3,name=>"cat 1")
);

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

EN

回答 15

Stack Overflow用户

发布于 2009-06-19 18:55:11

那么SPL版本如何呢?它将为您省去一些输入:

代码语言:javascript
复制
// I changed your input example to make it harder and
// to show it works at lower depths:

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

//here's the code:

    $arrIt = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));

 foreach ($arrIt as $sub) {
    $subArray = $arrIt->getSubIterator();
    if ($subArray['name'] === 'cat 1') {
        $outputArray[] = iterator_to_array($subArray);
    }
}

最棒的是,通过使用RecursiveDirectoryIterator而不是RecursiveArrayIterator,基本上相同的代码将遍历目录。SPL是roxor。

SPL唯一令人沮丧的地方是它在网络上的文档质量很差。但有几本PHP书籍详细介绍了一些有用的细节,特别是Pro PHP;您可能也可以在谷歌上搜索更多信息。

票数 74
EN

Stack Overflow用户

发布于 2013-02-20 12:52:48

代码语言:javascript
复制
<?php
$arr = array(0 => array("id"=>1,"name"=>"cat 1"),
             1 => array("id"=>2,"name"=>"cat 2"),
             2 => array("id"=>3,"name"=>"cat 1")
);
$arr = array_filter($arr, function($ar) {
   return ($ar['name'] == 'cat 1');
   //return ($ar['name'] == 'cat 1' AND $ar['id'] == '3');// you can add multiple conditions
});

echo "<pre>";
print_r($arr);

?>

参考:http://php.net/manual/en/function.array-filter.php

票数 56
EN

Stack Overflow用户

发布于 2010-06-28 20:21:16

代码语言:javascript
复制
if (isset($array[$key]) && $array[$key] == $value)

对快速版本的一个小改进。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1019076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档