这是下面另一个问题的后续问题;
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
派上用场。但是,如果我想过滤所选元素呢?代码怎么样?
谢谢。
答案 0 :(得分: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
更新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 强>
答案 1 :(得分:1)
你可以使用它;
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
答案 2 :(得分:0)
在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 强>