Вы можете сделать это так:
//test data
$array[] = new stdClass;
$array[0]->not_wanted_key1 = '1';
$array[0]->not_wanted_key2 = '3';
$array[0]->wanted_key1 = '4';
$array[0]->wanted_key2 = '5';
$array[0]->wanted_key3 = '6';
print_r($array);
$map = array_flip(['wanted_key1', 'wanted_key2', 'wanted_key3']);
$res = array_map(function($item) use ($map){
return array_intersect_key((array) $item, $map);
}, $array);
print_r($res);
выход
//input array
Array
(
[0] => stdClass Object
(
[not_wanted_key1] => 1
[not_wanted_key2] => 3
[wanted_key1] => 4
[wanted_key2] => 5
[wanted_key3] => 6
)
)
//output array
Array
(
[0] => Array
(
[wanted_key1] => 4
[wanted_key2] => 5
[wanted_key3] => 6
)
)
Песочница
Довольно просто, уловка (array)
приведение объекта к массиву, а затем мне нравится использовать array_intersect_key
, но мне лень вручную $map
делать, поэтому я просто переворачиваю значения, чтобы быть ключами ,
Таким образом, вы можете легко добавлять / удалять ключи, которые хотите сохранить, просто добавляя / удаляя их из $map
.
Если вы хотите сохранить внутренний массив как объект, вы также можете привести его обратно! так что измени это:
return array_intersect_key((array) $item, $map);
К
return (object)array_intersect_key((array) $item, $map);
выход
Array
(
[0] => stdClass Object
(
[wanted_key1] => 4
[wanted_key2] => 5
[wanted_key3] => 6
)
)
Песочница
Для ясности все, что вам нужно, это остальное для тестирования:
$map = array_flip(['wanted_key1', 'wanted_key2', 'wanted_key3']);
$res = array_map(function($item)use($map){return array_intersect_key((array)$item,$map);},$array);