在数组中搜索数组输入键

时间:2017-02-28 09:29:44

标签: php arrays

如何找到具有适当值的disciplines的键数组?
例如:

$arr1 = [2, 4, 12];
$result = [...] // Var_dump in link   
in_array($arr1, $result);

无论他们的订单如何,我都需要查看是否有一组钥匙或没有。 但是in_array()不起作用。 谢谢!

Dump array

更新(01.03.2017)

这是我对此问题的解决方案的版本

 $findResult = array_filter($result, function($val)use($get){
            $requiredDisciplines = [1, $get['disciplines']['second'], $get['disciplines']['third'], $get['disciplines']['four']]; // запрос
            $activePriorities = [];

            foreach ($val['disciplines'] as $discipline) {
                if (in_array($discipline['id'], $requiredDisciplines)) {
                    $activePriorities[] = $discipline['priority'];
                }
            }

            for ($i = 0; $i<3; $i++){
                if(!in_array($i, $activePriorities))
                    return false;
            }

            /*if(in_array(0, $activePriorities) && in_array(1, $activePriorities) && in_array(2, $activePriorities) != true)
                return false;*/

          //  print_r($activePriorities);

            return true;
        });

1 个答案:

答案 0 :(得分:2)

我有一个多功能的单行程,它将为您提供包含匹配项的所有数组。 (这样你就可以从中得到密钥或计数)。 (demo

此功能仅设置为比较针和草垛之间的,但可以通过替换array_intersect设置为搜索键 - 值对使用array_intersect_assoc并将,ARRAY_FILTER_USE_BOTH添加到过滤器功能的末尾(参考:第2段代码@ https://stackoverflow.com/a/42477435/2943403

<?php
// haystack array
$result[]=array(1,2,3,4,5,6,7,8,9,10,11,12);
$result[]=array(1,3,5,7,9,11);
$result[]=array(2,4,6,8,10,12);

// needle array
$arr1=array(2,4,12);

//one-liner:
$qualifying_array=array_filter($result,function($val)use($arr1){if(count(array_intersect($val,$arr1))==count($arr1)){return $val;}});

/*
// multi-liner of same function:
$qualifying_array=array_filter(
    $result,
    function($val)use($arr1){  // pass in array to search
        if(count(array_intersect($val,$arr1))==count($arr1)){  // total pairs found = total pairs sought
            return $val;
        }
    }
);*/


echo 'Total sub-arrays which contain the search array($arr1): ',sizeof($qualifying_array),"<br>";
echo 'Keys of sub-arrays which contain the search array($arr1): ',implode(',',array_keys($qualifying_array)),"<br>";
echo 'Is search array($arr1) in the $result array?: ',(sizeof($qualifying_array)?"True":"False"),"<br>";
echo "<pre>";
print_r($qualifying_array);
echo "</pre>";

输出:

Total sub-arrays which contain the search array($arr1): 2
Keys of sub-arrays which contain the search array($arr1): 0,2
Is search array($arr1) in the $result array?: True
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
            [5] => 6
            [6] => 7
            [7] => 8
            [8] => 9
            [9] => 10
            [10] => 11
            [11] => 12
        )

    [2] => Array
        (
            [0] => 2
            [1] => 4
            [2] => 6
            [3] => 8
            [4] => 10
            [5] => 12
        )

)