如何将默认值合并到新多维数组的子数组中?



使用默认键/值对定义新的多维数组的最佳方法是什么?

我认为最好用这里的代码示例来解释:

$defaultOptions = ['foo' => 'bar', 'another' => 'value'];
$mdArray = [
'first' => [
'title' => 'I am first',
$defaultOptions,
],
'second' => [
'title' => 'I am second',
$defaultOptions
]
];

这会产生:

Array 
( 
[first] => Array 
( 
[title] => I am first 
[0] => Array  
( 
[foo] => bar 
[another] => value ) 
) 
[second] => Array 
( 
[title] => I am second 
[0] => Array 
( 
[foo] => bar 
[another] => value 
) 
) 
)

我希望从$mdArray$defaultOptions中省略0键,以便键/值对将应用于与定义$defaultOptions相同的级别。

有没有办法在数组定义中做到这一点,还是我必须稍后处理这个数组并附加这些$defaultOptions

您可以通过两种方式实现它。

第一个选项是使用运算符+

$mdArray = [
'first' => ['title' => 'I am first'] + $defaultOptions,
'second' => ['title' => 'I am second'] + $defaultOptions
];

+ 运算符返回附加到左侧的右侧数组 数组;对于两个数组中都存在的键,来自 将使用左侧数组,并且匹配的元素来自 右侧数组将被忽略。

http://php.net/manual/en/language.operators.array.php

第二个选项是使用array_merge()函数:

$mdArray = [
'first' => array_merge(['title' => 'I am first'], $defaultOptions),
'second' => array_merge(['title' => 'I am second'], $defaultOptions)
];

如果输入数组具有相同的字符串键,则后面的值 因为该键将覆盖前一个键。但是,如果数组 包含数字键,后面的值不会覆盖原始值 值,但将被追加。输入数组中带数字的值 键将重新编号,从零开始递增键 结果数组。

http://php.net/manual/en/function.array-merge.php

你需要使用array_merge()

以下是更新的代码:

<?php
$defaultOptions = ['foo' => 'bar', 'another' => 'value'];
$mdArray = [
'first' => [
'title' => 'I am first'
],
'second' => [
'title' => 'I am second'
]
];
foreach($mdArray as $key => $value){
$mdArray[$key] = array_merge($mdArray[$key], $defaultOptions);
}
print_r($mdArray);
?>

这是输出:

Array
(
[first] => Array
(
[title] => I am first
[foo] => bar
[another] => value
)
[second] => Array
(
[title] => I am second
[foo] => bar
[another] => value
)
)

这可以通过array_merge来实现:

$defaultOptions = ['foo' => 'bar', 'another' => 'value'];
$mdArray = [
'first' => array_merge(['title' => 'I am first'], $defaultOptions),
'second' => array_merge(['title' => 'I am second'], $defaultOptions),
];

纯粹是因为没有发布+的循环方法,我将添加它。 这将通过引用变量 (&$a将默认值添加到主数组中。

法典:

$defaultOptions=['foo'=>'bar','another'=>'value'];
$mdArray = ['first'=>['title'=>'I am first'],
'second'=>['title'=>'I am second']
];
foreach($mdArray as &$a){
$a+=$defaultOptions;
}
var_export($mdArray);

输出:

array (
'first' => 
array (
'title' => 'I am first',
'foo' => 'bar',
'another' => 'value',
),
'second' => 
array (
'title' => 'I am second',
'foo' => 'bar',
'another' => 'value',
),
)

作为记录,array_replace()也将执行此任务(尽管调用它是一个不太直观的函数(:

foreach($mdArray as &$a){
$a=array_replace($a,$defaultOptions);
}

最新更新