我有一个动态数组,显示如下所示的值:
$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);
}
}
答案 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];
}
}