0

我正在通过 php 代码从 excel 表中读取。有些字段是可选的。当我使用库时,我得到这样的结果

Array
    (
    [1] => Test123
    [2] => None
    [3] => Booster
    [6] => Yes
    [7] => Yes
    [8] => 1
    [9] => Unknown
    [10] => 21
    [11] => http://unknowm.com
    )

在那里您可以看到索引 4 和 5 丢失,因为这些值不存在于 excel 文件列中。现在我必须将此数组与另一个具有命名索引的数组合并。第二个数组的长度是 11。但是当我合并两个 php 错误时,会产生一个未定义的索引 4 和 5。我正在动态地做这项工作,我不得不使用第二个数组的所有索引。在将其合并到第二个之前,我希望将缺少的第一个(来自 excel)数组索引用空字符串填充。我怎样才能做到这一点?我希望我提供了很多信息。

4

3 回答 3

4

您可以使用array_fill创建一个包含您希望结果具有的所有键的数组,并使用数组加法运算符添加原始数组中缺少的那些:

$firstIndexToEnsure = 1;
$lastIndexToEnsure = 11;
$defaults = array_fill($firstIndexToEnsure,
                       $lastIndexToEnsure - $firstIndexToEnsure + 1,
                       '');
$array += $defaults;

看到它在行动

如果您需要通过键对结果进行额外排序,那么也可以使用ksort它。

值得一提的是,无论您接受可能仅部分覆盖某些默认值的用户输入,该技术也适用于非整数键:

$params = array('color' => 'blue', 'size' => 'large');
$defaults = array(
    'color' => 'red',
    'size'  => 'large',
    'shape' => 'square',
    'age'   => 'old',
);

$params += $defaults;
于 2012-09-15T11:28:27.613 回答
2

试试这个方法:

$array = array(
    0 => "a",
    2 => "b",
    4 => "b",
    5 => "b",
    6 => "b",
);

// If min and max are static, use numbers instead of getting them from the array
$keys = array_keys($array);
$all = array_fill(min($keys), max($keys) - min($keys) + 1, "");
$filled = $array + $all;

var_dump($filled);
于 2012-09-15T11:31:38.643 回答
2

使第一个数组完整:

$lastindex = 11;
for($i=1; $i<=$lastindex; $i++)
  if( !isset($array[$i] ))
    $array[$i] = '';

现在您可以轻松地与第二个数组合并。

于 2012-09-15T11:32:04.487 回答