Php 数组\u替换\u递归将值保留为具有空值的键
我使用这个函数就像在我的控制器中使用angular.extend()或$.extend()一样Php 数组\u替换\u递归将值保留为具有空值的键,php,Php,我使用这个函数就像在我的控制器中使用angular.extend()或$.extend()一样 function extend($base = array(), $replacements = array()) { $base = !is_array($base) ? array() : $base; $replacements = !is_array($replacements) ? array() : $replacements; return array_repl
function extend($base = array(), $replacements = array())
{
$base = !is_array($base) ? array() : $base;
$replacements = !is_array($replacements) ? array() : $replacements;
return array_replace_recursive($base, $replacements);
}
标准用途:
$inputs = extend([
'name' => 'test',
'empty'
], getInputs());
// getInputs() grabs the data from a form encoded or json body request.
我希望empty
成为一个键,以便以后可以将此数组用于Laravel模型或其他对象
我得到:
[
[name] => 'test',
[0] => 'empty'
]
我想:
[
[name] => 'test',
[empty] => null
]
这应该输出:OK(1个测试,2个断言)
是否有一种本机方法来实现这一点,或者我将使用自己的方法?在PHP中,数组中的非关联元素被视为具有自动整数键的关联数组的值。国家: 该键是可选的。如果未指定,PHP将使用 以前使用的最大整数键的增量 这意味着
['abc','def']
与[0=>'abc',1=>'def']
相同
如果希望函数使用值作为键,则无法将实际使用整数作为键的数组与PHP由于缺少键而自动分配的数组区分开来
我个人认为,只需更改函数的输入,使其采用正确的格式就更容易了:['name'=>'test','empty'=>null]
如果这不是一个选项,并且您知道您收到的值将永远不会有数字作为键,则需要将您的函数更改为如下所示:
function extend($base, $replacements) {
$base = !is_array($base) ? array() : $base;
$replacements = !is_array($replacements) ? array() : $replacements;
$ret = array();
foreach ($base as $key => $val) {
if (is_int($key)) { // value without key
$ret[$val] = null;
} else {
$ret[$key] = $val;
}
}
return array_replace_recursive($ret, $replacements);
}
但是
empty
是输入数组中的一个值。您希望该函数将其更改为密钥吗?@onetrickpony我刚刚澄清了我的问题。谢谢您的解释!:)
function extend($base, $replacements) {
$base = !is_array($base) ? array() : $base;
$replacements = !is_array($replacements) ? array() : $replacements;
$ret = array();
foreach ($base as $key => $val) {
if (is_int($key)) { // value without key
$ret[$val] = null;
} else {
$ret[$key] = $val;
}
}
return array_replace_recursive($ret, $replacements);
}