【问题标题】:How to check multidimensional arrays for the given key value pairs ie. exactly same keys and values?如何检查给定键值对的多维数组,即。完全相同的键和值?
【发布时间】:2019-10-03 10:45:10
【问题描述】:

当与主数组比较时,它应该返回主数组的匹配键

例如:

$a = array(
   'a' => array('key1' => 'value1', 'key2' => 'value1', 'key3' => 'value1'),
   'b' => array('key1' => 'value2', 'key2' => 'value2', 'key3' => 'value2'), 
   'c' => array('key1' => 'value3', 'key2' => 'value3', 'key3' => 'value3'),
   'd' => array('key1' => 'value2', 'key2' => 'value2', 'key3' => 'value4')
);


1: $search1 = array('key1' => 'value2', 'key2' => 'value2');

当与上面的数组 search1 比较时,它应该返回键 'b' 和 'd'

即。 ['b','d']

    2: $search2 = array('key1' => 'value3', 'key3' => 'value3');

当与上面的数组 search2 比较时,它应该返回 key 'c'

即。 ['c']

    3: $search3 = array('key1' => 'value3', 'key2' => 'value3', 'key3' => 'value3' );

当与上面的数组 search3 比较时,它应该返回 key 'c'

即。 ['c']

    4: $search4 = array('key1' => 'value2');

当与上面的数组 search4 比较时,它应该返回键 'b' 和 'd'

即。 ['b','d']

【问题讨论】:

    标签: php laravel codeigniter laravel-5 logic


    【解决方案1】:

    试试这个,

    $output =array(
    'a' => array('key1' => 'value1', 'key2' => 'value1', 'key3' => 'value1'),
    'b' => array('key1' => 'value2', 'key2' => 'value2', 'key3' => 'value2'), 
    'c' => array('key1' => 'value3', 'key2' => 'value3', 'key3' => 'value3'),
    'd' => array('key1' => 'value2', 'key2' => 'value2', 'key3' => 'value4')
    );
    
    $res = [];
    $search = array('key1' => 'value2');
    
    foreach($output as $key => $out)
    {
    if(isset($search['key1']) && isset($search['key2']) && !array_key_exists('key3',$search))
    {
        if($search['key1'] == $out['key1'] && $search['key2'] == $out['key2'])
        {
            $res[] = $key;
        }
    }
    if(isset($search['key1']) && isset($search['key3']) && !array_key_exists('key2',$search))
    {
        if($search['key1'] == $out['key1'] && $search['key3'] == $out['key3'])
        {
            $res[] = $key;
        }
    }
    if(isset($search['key2']) && isset($search['key3']) && !array_key_exists('key1',$search))
    {
        if($search['key2'] == $out['key2'] && $search['key3'] == $out['key3'])
        {
            $res[] = $key;
        }
    }
    if(!array_key_exists('key1',$search) && !array_key_exists('key2',$search) && isset($search['key3']))
    {
       if($search['key3'] == $out['key3'])
        {
            $res[] = $key;
        } 
    }
    if(!array_key_exists('key2',$search) && !array_key_exists('key3',$search)&& isset($search['key1']))
    {
       if($search['key1'] == $out['key1'])
        {
            $res[] = $key;
        } 
    }
    if(!array_key_exists('key1',$search) && !array_key_exists('key3',$search)&& isset($search['key2']))
    {
       if($search['key2'] == $out['key2'])
        {
            $res[] = $key;
        } 
    }
    if(isset($search['key1']) && isset($search['key2']) && isset($search['key3']))
    {
        if($search['key1'] == $out['key1'] && $search['key2'] == $out['key2'] && $search['key3'] == $out['key3'])
        {
            $res[] = $key;
        }
    }
    }
    print_r($res);die();
    

    用测试条件更改$search以获得结果...

    【讨论】:

      【解决方案2】:

      您可以使用array_intersect_assoc,例如:

      function compareArrays($x, $y){
        $output = []; // Create an empty array to hold the output
      
        foreach($x as $key => $value): // Loop array $x as key/value
          if (count(array_intersect_assoc($y, $value)) > 0) { // Check if the intersection is greater than 0
            $output[] = $key; // If so, push the key to $output
          }
        endforeach;
      
        print_r($output); // Do something with the output
      }
      

      上面的函数有 2 个参数,即要比较的 2 个数组。第一个阵列是主阵列。它输出与第一个参数不匹配的项目数组。一个更完整的例子:

      $a = array(
         'a' => array('key1' => 'value1', 'key2' => 'value1', 'key3' => 'value1'),
         'b' => array('key1' => 'value2', 'key2' => 'value2', 'key3' => 'value2'), 
         'c' => array('key1' => 'value3', 'key2' => 'value3', 'key3' => 'value3'),
         'd' => array('key1' => 'value2', 'key2' => 'value2', 'key3' => 'value4')
      );
      
      $search1 = array('key1' => 'value2', 'key2' => 'value2');
      $search2 = array('key1' => 'value3', 'key3' => 'value3');
      $search3 = array('key1' => 'value3', 'key2' => 'value3', 'key3' => 'value3' );
      $search4 = array('key1' => 'value2');
      
      function compareArrays($x, $y){
        $output = [];
      
        foreach($x as $key => $value):
          if (count(array_intersect_assoc($y, $value)) > 0) {
            $output[] = $key;
          }
        endforeach;
      
        print_r($output);
      }
      
      compareArrays($a, $search1); // b,d
      compareArrays($a, $search2); // c
      compareArrays($a, $search3); // c
      compareArrays($a, $search4); // b,d
      

      Working example

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多