将关联数组填充到所需的长度


Fill up associative array to desired length

所以我的代码中有3个数组。第一个($values)数组中有一些值,第二个($keys)数组中有第一个数组对应的键作为值,第三个($someOtherArray)数组中只有数组的长度与值无关。

的例子:

$values = [343, 90];
$keys =   [  2,  3];
$desiredLength = count($someOtherArray);

现在我的目标是创建一个长度为$someOtherArray的数组,也就是$desiredLength。数组应该包含$values对应的键,在$keys中定义,数组的其余部分应该填充到$desiredLength的长度,并使用默认值,这里我想要0。

所以如果我想要的长度是5我期望的结果是:

Array (
    [0] => 0,
    [1] => 0,
    [2] => 343,
    [3] => 90,
    [4] => 0
)

这是我到目前为止的代码:

function create_array($someOtherArray, $values, $keys)
{
    $result = [];
    $length = sizeof($values);
    $comma_separated_values = implode(",", $values);
    for($i = 0; $i <= $someOtherArray - 1; $i++)
    {
        #Code...
        array_splice($result, $comma_separated_values, $values);
    }
    return $result;
}

现在这段代码不工作,它显示了一个错误:

array_splice()期望参数3为

中给定的长数组

可以使用几个PHP数组函数。

$values = [343, 90];
$keys = [2, 3];
$desiredLength = 5;
$existingValues = array_combine($keys, $values);
$result = array_fill(0, $desiredLength, 0);
$result = $existingValues + $result;
ksort($result);
print_r($result);

解释

首先,我们创建一个数组,其中键取自$keys数组,值取自$values,使用array_combine:

$existingValues = array_combine($keys, $values);

然后为结果数组创建一个结构,其中用0填充所有值。这是通过array_fill:

完成的
$result = array_fill(0, $desiredLength, 0);

现在,我们需要合并数组,这样,如果它们具有相同的索引,则值将被覆盖。这是用+运算符完成的,但是数组的顺序是重要的!如果我们这样做,结果数组将保留$existingValues:

中的索引。
$result = $existingValues + $result;

同样,我们不能在array_merge中这样做,因为它不会覆盖数字键:

但是,如果数组包含数字键,则后面的值不会覆盖原始值,而是会被附加。

最后,按键对数组排序:

ksort($result);