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

时间:2016-09-01 10:25:25

标签: php arrays

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

1 个答案:

答案 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);