【问题标题】:Filtering selected elements from array of associative arrays从关联数组的数组中过滤选定的元素
【发布时间】:2014-04-23 05:53:07
【问题描述】:

这是下面另一个问题的后续问题;

Removing selected elements from array of associative arrays

这一次,我想从关联数组的数组中过滤选定的元素,而不是删除它们。

我有这个数组;

$result = array(
    (int) 0 => array(
        'name' => 'Luke',
        'id_number' => '1111',
        'address' => '1544addr',
        'time_here' => '2014-04-12 13:07:08'
    ),
    (int) 1 => array(
        'name' => 'Sam',
        'id_number' => '2222',
        'address' => '1584addr',
        'time_here' => '2014-04-12 14:15:26'

我想从这个数组中过滤选定的元素,使其看起来像这样;

array(
    (int) 0 => array(
        'name' => 'Luke',
        'id_number' => '1111'
    ),
    (int) 1 => array(
        'name' => 'Sam',
        'id_number' => '2222'

对于删除元素,函数unset 派上用场。但是如果我想过滤选定的元素怎么办?代码会是什么样子?

谢谢。

【问题讨论】:

    标签: php arrays associative-array


    【解决方案1】:

    试试这个

       // $result is your input array
        $arr_filter_keys = array("name", "id_number"); // array of keys to be filter
        $arr_filter_result = array();  // output array
        foreach($result as $key=>$arr)
        {
           foreach($arr_filter_keys as $filter_key)
           {
              $arr_filter_result[$key][$filter_key] = $arr[$filter_key];
           }
        }
    
        print_r($arr_filter_result); // output array
    

    Demo-1

    更新 2:

    如果你想得到相同的数组

       // $result is your input array
        $arr_filter_keys = array("name", "id_number"); // array of keys to be filter
    
        foreach($result as $key=>$arr)
        {
           foreach($arr as $k=>$v)
           {
             if(!in_array($k, $arr_filter_keys))
             {
                unset($result[$key][$k]);
             } 
           }
        }
    
        print_r($result); // output array
    

    Demo-2

    【讨论】:

    • 谢谢。在我看来,Demo-1 会比 Demo-2 运行得更快,对吧?
    • 是的,因为在 demo-1 中没有检查 if in_array 的条件
    【解决方案2】:

    你可以用这个;

    function filterArr(&$arr, $keys_to_be_filtered) {
        foreach($arr as $key => $value) 
        { 
            foreach($keys_to_be_filtered as $key_to_remove) {
                unset($arr[$key][$key_to_remove] ); 
            }
        }   
    }
    
    filterArr($result, array("address", "time_here"));
    

    这是一个工作演示:Demo

    【讨论】:

      【解决方案3】:

      unset 之前将它们保存在另一个数组中。

      $filtered = array();
      foreach($arr as $key=>$val){
        $filtered[$key]['address'] = $val['address'];
        $filtered[$key]['time_here'] = $val['time_here'];
        unset($arr[$key]['address'],$arr[$key]['time_here']);
      }
      

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-26
        • 1970-01-01
        • 2022-01-03
        • 1970-01-01
        • 2014-01-05
        • 1970-01-01
        • 1970-01-01
        • 2017-01-14
        相关资源
        最近更新 更多