所以我的代码中有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是
中给出的long数组
答案 0 :(得分:1)
为此,您可以使用多个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);
现在,我们需要合并数组,这样如果它们具有相同的索引,则会覆盖值。这是通过+
运算符完成的,但数组的顺序是 important !我们这样做,结果数组将保留$existingValues
:
$result = $existingValues + $result;
另外,我们无法使用array_merge,因为它不会覆盖数字键:
但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会附加。
最后,按键排序数组:
ksort($result);