我有以下PHP数组,其中一些元素在外部数组中重复一次,在内部数组中重复一次:
array(
'content' =>
array(
'car' => '1',
'house' => '2',
'name' => 'a_name',
),
'restrictions' =>
array(
'page_size' => 500,
'page_offset' => 0,
),
'car' => '1',
'house' => '2',
'name' => 'a_partner_name',
'criteria' => array(),
);
我想知道如何执行以下操作(可能使用array_walk_recursive)?
完全从数组中删除元素,例如,如果我删除'car'元素,结果数组将是这样的(注意数组中的2'car'元素都被删除):
array(
'content' =>
array(
'house' => '2',
'name' => 'a_name',
),
'restrictions' =>
array(
'page_size' => 500,
'page_offset' => 0,
),
'house' => '2',
'name' => 'a_partner_name',
'criteria' => array(),
);
为数组中的元素设置一个值,例如,如果我将'car'元素值从'1'更改为'2',则生成的数组看起来像(再次注意它在2个位置更改):
array(
'content' =>
array(
'car' => '2',
'house' => '2',
'name' => 'a_name',
),
'restrictions' =>
array(
'page_size' => 500,
'page_offset' => 0,
),
'car' => '2',
'house' => '2',
'name' => 'a_partner_name',
'criteria' => array(),
);
非常感谢!
答案 0 :(得分:2)
使用references(& )可以更轻松(尽管我不建议使用此类结构)和unset进行删除。
$innerArray = ['car' => 'some value'];
$outerArray = [
'content' => &$innerArray,
'car' => &$innerArray['car']
];
// change car to '2'
$outerArray['car'] = '2';
// is the same as
$innerArray['car'] = '2';
// is the same as
$outerArray['content']['car'] = '2';
// you can use this for deletion
function removeRecursive(&$array, $elem){
foreach ($array as $key => &$value) {
if($key === $elem)
unset($array[$key]);
elseif ($value instanceof Traversable || is_array($value))
removeRecursive($value, $elem);
}
}
removeRecursive($outerArray, 'car');