在php中用空字符串填充数组的中间索引

时间:2012-09-15 11:24:46

标签: php arrays

我正在通过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)数组索引缺少用空字符串填充它之前到第二个。我怎样才能做到这一点?我希望我提供了很多信息。

3 个答案:

答案 0 :(得分:4)

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

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

See it in action

如果您需要按键对结果进行额外排序,请同时使用ksort

值得一提的是,无论您接受的用户输入是否只能部分覆盖某些默认值,此技术对非整数键也非常有效:

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

$params += $defaults;

答案 1 :(得分: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);

答案 2 :(得分:2)

完成第一个数组:

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

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