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

Posted

技术标签:

【中文标题】php - 如何在关联数组的数组中搜索多个键/值对并返回匹配项?【英文标题】:php - how to search for multiple key/value pairs in an array of associative arrays and return matching items? 【发布时间】:2017-11-27 00:28:22 【问题描述】:

这是关联数组:

 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=assure 和 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:

我使用下面的方法来获取具有visible: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);
    );

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

【问题讨论】:

我不太清楚你的问题.. @BEJGAMSHIVAPRASAD 我已经更新了问题和详细信息。我希望现在很清楚。 【参考方案1】:

试试这个解决方案。

$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;
 

【讨论】:

这不适用于提供的数组过滤器。但是,这在您为过滤器 ($filters) 指定的格式下可以正常工作。

以上是关于php - 如何在关联数组的数组中搜索多个键/值对并返回匹配项?的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 sql 的键值对搜索 php 多维关联数组,例如 '%LIKE%' 构造

关联数组中的PHP三元语句来设置键和值?

按特定键的内部数组的值对PHP二维数组进行排序[重复]

PHP在关联数组前面加上文字键?

PHP 数组中的每个ID键关联一个值,可不可以关联两个值?

如何在 PHP 中搜索数组中的多个值?