当前位置: 首页 > 知识库问答 >
问题:

php-如何在关联数组中搜索多个键/值对并返回匹配项?

禹昊穹
2023-03-14

这是关联数组:

 Array
   (
    [tableData] => Array
        (
            [0] => Array
            (
                [booking_name] => abc/xyz/123
                [pdg] => assure                    
                [user_area] => es st
                [release] => oss72
                [start_date] => 2017-06-20 00:00:00
                [end_date] => 2017-06-23 00:00:00
                [asset_info] => Array
                    (
                        [0] => Array
                            (
                                [status] => 10
                                [manufacturer] => HP
                                [model] => HP BL460C GEN8
                                [hardware_color] => #0066b3
                            )

                    )

                [full_name] => Valay Desai
                [email_address] => valay@xyz.com
            )
            [1] => Array
            (
                [booking_name] => abc/xyz/123
                [pdg] => assure
                [user_area] => ls reca
                [release] => oss72
                [start_date] => 2017-06-20 00:00:00
                [end_date] => 2017-06-23 00:00:00
                [asset_info] => Array
                    (
                        [0] => Array
                            (
                                [status] => 10
                                [manufacturer] => SUN
                                [model] => SUN GEN8
                                [hardware_color] => #0066b3
                            )

                    )

                [full_name] => Chako Desai
                [email_address] => chako@xyz.com
            )
            ......
            [500] => Array ()
        )
)

我知道通过使用array_filter过滤数据并比较值的正常方法。我想在tableData中搜索以下键/值对。

Array
(
 [booking_name] => abc        
 [pdg] => Array
        (
            [0] => Array
                (
                    [name] => Invalid
                    [value] => Invalid

                )

            [1] => Array
                (
                    [name] => assure
                    [value] => assure

                )

        )

    [user_area] => Array
        (
            [0] => Array
                (
                    [name] =>  es st
                    [value] =>  es st

                )

            [1] => Array
                (
                    [name] => Invalid
                    [value] => Invalid

                )

            [2] => Array
                (
                    [name] => a&o
                    [value] => a&o

                )

        )

)

理想的输出应该是来自tableData的第一个元素,因为它booking_name=abc,pdg=保证和user_area=es st

我尝试了:

// bigarray is an originial array to be filtered
// filterObj is an array with multiple filter conditions
    array_filter($bigarray, function ($val_array) use ($filterObj) {
            $intersection = array_intersect_assoc($val_array, $filterObj);
            return (count($intersection)) === count($filterObj);
        });

这总是返回空数组。

仅供参考-我是新的PHP

更新1:

我使用下面的方法来获取具有可见的对象:true。对所问问题进行了类似的尝试,但未能获得理想的结果。

$columnVisible = array(
       'visible' => 1,
    );

    $visibleColumns = array_filter($passedColumns, function ($val_array) use ($columnVisible) {
        $intersection = array_intersect_assoc($val_array, $columnVisible);
        return (count($intersection)) === count($columnVisible);
    });

如何在关联数组上应用作为数组数组传递的多个过滤条件?

共有1个答案

邬英武
2023-03-14

试试这个解决方案。

$filters = array('pdg'=>array('xyzabc'), 'user_area'=>array('ls reca'));
$filter_items = array();
foreach( $items['tableData'] as $item ){
    $i=0;
    $is_match = true;


 foreach( $filters as $key=>$value){
    //$is_match = true;
    if( !in_array( $item[$key], $value) ){
        $is_match = false;
        break;
    }
    //$is_match = true;
 }

 if( $is_match ){
    $filter_items[] = $item;
 }
}
 类似资料:
  • 我是新来的PHP,一直在使用社区和答案在这里,真正帮助我的一个小项目,我正在工作,所以提前感谢大家的帮助到目前为止! 我正在提取保存在格式不良的文本文件/提要中的大量信息,修剪特殊字符的内容,然后使用查找其他特定字符串,并用逗号(,)或分号(;)替换它们,以创建一段可用的文本。然后我想在这个文本中搜索特定的关键字,并返回文本的其他部分。 到目前为止,我已经成功地将文本分解成多维数组,但我现在还不知

  • 我有两个矩阵,一个是矩阵(ncol=1,nrow=20,000),存储我要搜索的值,另一个矩阵是矩阵,存储一个大型数据集(ncol=1,nrow=5,000)。 矩阵:(,,....是行名) 矩阵:(,,,,...是行名) 我要为矩阵中的每个值查找矩阵的哪一行包含该字符串,并记录其矩阵的行名,并将其放在矩阵中该字符串行的下列列中(或在一列中,但用“,”分隔)。 例如,我希望有一个循环,首先从索引矩

  • 我想索引和搜索使用Lucene索引的数据片段。 例如。物品及其颜色 搜索示例 可能的解决办法 根据我在答案中发现的,显然我可以使用这种格式将这些添加到一个字段中。 如果我现在用这种格式的数据进行搜索,我不会得到任何结果。 null

  • 问题内容: 我正在寻找给定此数组的函数, 我想寻找针头 “面包” 并得到以下结果 问题答案: 使用。您可以提供一个回调,该回调确定哪些元素保留在数组中以及哪些元素应删除。(从回调返回的值指示应删除给定的元素。)类似这样的东西: 欲获得更多信息: 返回值

  • 我正在从flickrs API获取一些JSON。我的问题是exif数据的顺序因相机而异。所以我不能硬编码一个数组号来获得,例如,下面的相机型号。PHP是否有任何内置方法来搜索关联数组值并返回匹配数组?在下面的示例中,我想搜索

  • 问题内容: 我有一对对。是否可以精确匹配&的值,然后检查其范围值? 示例:在doc下面是一个带有名称,值对的数组。我需要检查它是否具有键,然后检查它的值是否小于1000。 以下是我的过滤器。 我还需要检查以下内容,以便返回结果 “ client.name”必须是“ Athena” “ client.db。@ type”必须为“ Oracle”,然后继续进行以下检查 找不到“ client.db.o