2012-11-11 183 views
0

我刚刚显示了从数组中删除数字超过2个小数位的数字的方法[here]。 的事情是,当我尝试使用echo代替的var_dump这样格式化输出:删除空数组元素

$line = 1; 
for($i = 1; $i < count($value1); $i++){ 
    echo "$line | ".$value1[$i][0]." | ".$value1[$i][1]." | ".$value1[$i][2]." | ".$value1[$i][3]." | ".$value1[$i][4].'<br>'; 
    $line = $line + 1; 
} 

我得到很多“通知:未定义抵消:”所有的地方。有没有办法重置数组中的行?

我需要使用“echo”格式化它的原因是,我可以直接复制输出并将其粘贴到文档中,而无需从“var_dump”中删除不必要的字符。我做错了吗?提前

感谢名单...

Thanx提前。

+0

在数组上循环的正确方法取决于特定数组的内容和结构。那么......你的阵列里有什么?使用var_dump()并为我们很好地格式化输出。 – goat

回答

2

使用implode而不是unhandy concatenation怎么样?

<?php 
foreach ($value1 as $counter => $line){ 
    echo ($counter + 1) . " | ". implode(" | ", $line) . '<br>'; 
} 

这样就确保只有现有值被连接。如果您仍想从数组中移除元素,则可以考虑检查它们是否为空,然后使用unset

1

我不知道该怎么排列的样子,但你在肯定的代码有一个错误是:

for($i = 1; $i < count($value1); $i++) 

在PHP中的数组索引0开始,你需要纠正这样的代码:

for($i = 0; $i < count($value1); $i++) 

或使用foreach这是一个更容易。

1

解决了它。 后:

function decimalFilter($v) { 
     foreach ($v as $x) { 
      if (strlen(substr(strrchr($x, "."), 1)) > 2) 
       return false; 
     } 
     return true; 
    } 
$value = array_filter($value, "decimalFilter"); 

然后,添加:

sort($value); 

后跟:

for($i = 1; $i < count($value); $i++){ 
    echo $value[$i][0]." | ".$value[$i][1]." | ".$value[$i][2]." | ".$value[$i][3]." | ".$value[$i][4].'<br>'; 
} 

输出过程中的缺少的元素消失。事情是我不知道,如果这是一个实用的方法。

1

你可以使用一些方法来删除或忽略该数组元素,而PHP投掷声明:

$line = 1; 
for($i = 1; $i < count($value1); $i++){ 
if(isset($value[$i][0]) === TRUE && isset($value[$i][1]) === TRUE && isset($value[$i][2]) === TRUE && isset($value[$i][3]) === TRUE && isset($value[$i][4]) === TRUE) 
{ 
    echo "$line | ".$value1[$i][0]." | ".$value1[$i][1]." | ".$value1[$i][2]." | ".$value1[$i][3]." | ".$value1[$i][4].'<br>'; 
} 

    $line = $line + 1; 
} 

,或者你可以使用count($值$ i] [0])> 0,以保证该数组包含一个值。