Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组\u替换\u递归将值保留为具有空值的键_Php - Fatal编程技术网

Php 数组\u替换\u递归将值保留为具有空值的键

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

我使用这个函数就像在我的控制器中使用angular.extend()或$.extend()一样

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);        
}