用PHP中的前一个值(非null)填充数组中的null值

用PHP中的前一个值(非null)填充数组中的null值,php,arrays,foreach,null,Php,Arrays,Foreach,Null,我有一个动态数组,显示如下所示的值: $val_array = array("1","2","","","4","","","","",""); [0] => 1 [1] => 2 [2] => 2 [3] => 2 [4] => 4 [5] => 4 [6] => 4 [7] => 4 [8] => 4 [9] => 4 下面是简单地回显值的代码: foreach($val_array as $key => $value)

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

$val_array = array("1","2","","","4","","","","","");
[0] => 1
[1] => 2
[2] => 2
[3] => 2
[4] => 4
[5] => 4
[6] => 4
[7] => 4
[8] => 4
[9] => 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
我想要实现的是用最前面的非空值替换空值,如下所示:

$val_array = array("1","2","","","4","","","","","");
[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);  
    }
}
您的
if(empty($val_数组))
永远不会为真,因为$val_数组不是空的。您需要检查每个值是否大于0,或者如果您使用的是非数值,也可以检查strlen($value)>0

这应该起作用:

$last_value=NULL;

foreach($val_array as $value) {

    if ($value>0) {
        $last_value = $value;
    }else{
        $value = $last_value;
    }
    echo $value;
}
您的
if(empty($val_数组))
永远不会为真,因为$val_数组不是空的。您需要检查每个值是否大于0,或者如果您使用的是非数值,也可以检查strlen($value)>0

这应该起作用:

$last_value=NULL;

foreach($val_array as $value) {

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

嗯,根据数组的生成方式(来自DB或其他),您可以做不同的事情

从你的问题开始,我假设不是这样,这可能会给你一个重新开始的想法

您拥有“新”阵列:

在您的each方法中,我会写一个空值检查(有点像您这样),如下所示:

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];
}
($i=0;i=1)的

oldArray[1]=>2
oldArray[2]=>3
oldArray[3]=>4
返回oldArray[i];
}

如果数组来自DB,则始终可以查询数组值。

好的,根据数组的生成方式(来自DB或其他),可以执行不同的操作

从你的问题开始,我假设不是这样,这可能会给你一个重新开始的想法

您拥有“新”阵列:

在您的each方法中,我会写一个空值检查(有点像您这样),如下所示:

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];
}
($i=0;i=1)的

oldArray[1]=>2
oldArray[2]=>3
oldArray[3]=>4
返回oldArray[i];
}

如果数组来自DB,则始终可以查询数组值。

这里有一个简单的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];
    }
}
$val_array=array(“1”、“2”、“1”、“4”、“4”、“1”、“2”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“;
$count=计数($val_数组);
$last=0;//如果第一个值为null或false,则将其设置为0
对于($i=0;$i<$count;$i++){
if($val_数组[$i]==false){
$val_数组[$i]=$last;
}否则{
$last=$val_数组[$i];
}
}

这里有一个简单的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];
    }
}
$val_array=array(“1”、“2”、“1”、“4”、“4”、“1”、“2”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“4”、“;
$count=计数($val_数组);
$last=0;//如果第一个值为null或false,则将其设置为0
对于($i=0;$i<$count;$i++){
if($val_数组[$i]==false){
$val_数组[$i]=$last;
}否则{
$last=$val_数组[$i];
}
}

有时for比foreach好;)

if($val\u数组[0]==NULL){
$val_数组[0]=“defaultValue”;
}
对于($i=1;$i
有时for比foreach好;)

if($val\u数组[0]==NULL){
$val_数组[0]=“defaultValue”;
}
对于($i=1;$i
感谢@daniel的快速响应!我试过了,效果很好。我尝试过使用prev、next函数使其过于复杂,最终得到了一个很好的if语句。非常感谢您的回答!:)当然……很高兴能帮忙!谢谢@daniel的快速回复!我试过了,效果很好。我尝试过使用prev、next函数使其过于复杂,最终得到了一个很好的if语句。非常感谢您的回答!:)当然……很高兴能帮忙!谢谢@dragonslovetacos的回答!直到我测试完daniels,我才看到你的答案,但我真的很感谢你的帮助:)你是对的,数组来自数据库,这就是为什么有不规则的空值。再次感谢:)谢谢@dragonslovetacos的回答!直到我测试完daniels,我才看到你的答案,但我真的很感谢你的帮助:)你是对的,数组来自数据库,这就是为什么有不规则的空值。再次感谢:)我没有想到使用for循环!感谢您的回答@Akshay2598没有想到使用for循环!感谢您的回答@akshay2598