所以我的代码中有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);