将缺少的键添加到数组中

Ric*_*nop 9 php arrays

我有一个像这样的数组,缺少键:

array(2) {
  [0]=>
  string(4) "Bill"
  [2]=>
  string(13) "billy@kid.com"
}
Run Code Online (Sandbox Code Playgroud)

如何使用空字符串作为值添加缺失的键?我希望这样做:

array(3) {
  [0]=>
  string(4) "Bill"
  [1]=>
  string(0) ""
  [2]=>
  string(13) "billy@kid.com"
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*itt 8

你的问题很模糊,很难理解你想要什么,从我的解释来看,你似乎想要一个键插入数组,沿着索引线移动当前键.

你可能想尝试这样的事情:

function cleanArray(&$array)
{
    end($array);
    $max = key($array); //Get the final key as max!
    for($i = 0; $i < $max; $i++)
    {
        if(!isset($array[$i]))
        {
            $array[$i] = '';
        }
    }
}

cleanArray($array);
Run Code Online (Sandbox Code Playgroud)


Mar*_*ker 7

与Rinuwise的答案类似:

$t = array( 0 => "Bill",
            2 => "billy@kid.com"
          );


$u = $t + array_fill_keys( range(min(array_keys($t)),
                                 max(array_keys($t))
                                ),
                           ''
                           );

ksort($u);

var_dump($u);
Run Code Online (Sandbox Code Playgroud)

  • 如果省略`ksort($ u)`并使用`0`而不是'min(...)`这是*最佳*答案:保持键顺序并且不假设最大键所在的位置.缺点:不确定性能,而不是最直观的解决方案.总结:`$ t + array_fill_keys(范围(0,max(array_keys($ t))),'')` (2认同)

bis*_*sko 6

如果要自动设置空键,则可以执行此操作

$keys = array_keys($array);

$maxkey = end($keys); // it will fill only the values between 0 and last key

for ($i = 0; $i < $maxkey; $i++) {
    if (!array_key_exists($i, $array)) {
        $array[$i] = '';
    }
}
Run Code Online (Sandbox Code Playgroud)

  • json他没有循环数组,他循环键的大小,完全不同! (2认同)

Rii*_*imu 5

这里有一个不同的答案,如何通过利用数组求和运算符而无需循环.

<?php

$array = array(
    0 => "Bill",
    2 => "billy@kid.com",
);

// 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;

// If you want keys in order
ksort($filled);

var_dump($filled);
Run Code Online (Sandbox Code Playgroud)