Filtering selected elements from array of associative arrays

放肆的年华 提交于 2019-12-25 06:42:21

问题


This is a follow-up question to another question below;

Removing selected elements from array of associative arrays

This time, I would like to filter selected elements from an array of associative arrays instead of removing them.

I have this array;

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

I want to filter selected elements from this array such that it will look like this;

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

For removing elements, the function unset comes in handy. But what if I want to filter selected elements? How would the code look like?

Thank you.


回答1:


try this

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

UPDATE 2 :

if you want to result in same array

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




回答2:


You can use this;

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"));

Here is a working demo: Demo




回答3:


Before unset save them in another array.

$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



来源:https://stackoverflow.com/questions/23235855/filtering-selected-elements-from-array-of-associative-arrays

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!