删除空数组元素

时间:2012-11-11 20:57:03

标签: php multidimensional-array

我刚刚看到了从数组[here]中删除超过2位小数的数字的方法。 问题是当我尝试使用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”中删除不必要的字符。我做错了吗?

提前完成了......

提前完成。

4 个答案:

答案 0 :(得分:2)

使用implode而不是unhandy concatenation呢?

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

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

答案 1 :(得分:1)

我不知道数组的外观,但您在代码中遇到的一个错误是:

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

在PHP中,数组以索引0开头,您需要更正这样的代码:

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

或使用foreach这更容易。

答案 2 :(得分: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>';
}

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

答案 3 :(得分: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($ value [$ i] [0])&gt; 0以确保数组包含值。