在PHP中使用先前值(非null)填充数组中的空值

时间:2014-03-03 21:54:55

标签: php arrays foreach null

我有一个动态数组,显示如下所示的值:

$val_array = array("1","2","","","4","","","","","");

以下是简单回显值的代码:

foreach($val_array as $key => $value) {
    echo $value;    
}

结果是:

[0] => 1
[1] => 2
[2] => null
[3] => null
[4] => 4
[5] => null
[6] => null
[7] => null
[8] => null
[9] => null

我想要实现的是用最先前的非空值替换空值,如下所示:

[0] => 1
[1] => 2
[2] => 2
[3] => 2
[4] => 4
[5] => 4
[6] => 4
[7] => 4
[8] => 4
[9] => 4

我已经尝试包含一个if语句来检查null值是否存在然后包含prev函数但它停在第二个值:

foreach($val_array as $key => $value) {

    if (empty($val_array)) {
        $value = prev($val_array);  
    }
}

4 个答案:

答案 0 :(得分:2)

由于$ val_array不为空,因此if(empty($val_array))永远不会成立。您需要检查每个值是否大于0,或者如果您使用的是非数字值,也可以检查strlen($value)>0

这应该有效:

$last_value=NULL;

foreach($val_array as $value) {

    if ($value>0) {
        $last_value = $value;
    }else{
        $value = $last_value;
    }
    echo $value;
}

答案 1 :(得分:1)

嗯,取决于你的数组是如何生成的(来自数据库或其他东西) - 你可以做不同的事情。

离开你的问题,我会认为不是这样可能会让你想到再去一次。

你有“新”阵列:

[0] => 1
[1] => 2
[2] => 3
[3] => null
...

在你的每个方法中,我会写一个null的检查(有点像你这样):

for ($i=0; i<newArray.length; i++)
{
    if ( newArray[i] == null )
    {
         newArray[i] = getOldArrayValue(i);
    }
}

getOldArrayValue(index) {
   // Origional array is generated...
   $oldArray = array();
   oldArray[0] => 1
   oldArray[1] => 2
   oldArray[2] => 3
   oldArray[3] => 4

  return oldArray[i];
}

如果您的阵列来自数据库,那么您始终可以查询数组值。

答案 2 :(得分:1)

以下是一个简单的for循环:

$val_array = array("1","2","","","4","","","","","");
$count = count($val_array);
$last = 0; // if the first values are null or false it will be set to 0
for($i = 0; $i < $count; $i++){
    if($val_array[$i] == false){
        $val_array[$i] = $last;
    } else {
        $last = $val_array[$i];
    }
}

答案 3 :(得分:1)

有时候for for比foreach更好;)

if($val_array[0] === NULL){
  $val_array[0] = "defaultValue";
}

for($i=1; $i < count($val_array); $i++){
  if($val_array[$i] === NULL){
    $val_array[$i] = $val_array[$i-1];
  }
}