0

配列から小数点以下 2 桁を超える数値を削除する方法を示しました[こちら]。問題は、var_dump の代わりに echo を使用して出力をフォーマットしようとしたときです。

$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;
}

"Notice: Undefined offset: " というメッセージがいたるところに表示されます。配列内の行をリセットする方法はありますか?

「echo」でフォーマットする必要があるのは、「var_dump」から不要な文字を削除せずに、出力を直接コピーしてドキュメントに貼り付けることができるようにするためです。私はそれを間違っていますか?

事前にサンクス...

事前にサンクス。

4

4 に答える 4

2

不都合な連結の代わりに implode を使用するのはどうですか?

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

このようにして、既存の値のみが連結されることが保証されます。それでも配列から要素を削除したい場合は、それらが空であることを確認し、その後unsetを使用することを検討してください。

于 2012-11-11T21:06:45.593 に答える
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])> 0を使用して、配列に値が含まれていることを確認できます。

于 2012-11-11T21:30:43.117 に答える
1

配列がどのように見えるかはわかりませんが、コードで確かに発生しているエラーの1つは次のとおりです。

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

PHP では、配列は index で始まる0ため、次のようにコードを修正する必要があります。

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

または、はるかに簡単なforeachを使用します。

于 2012-11-11T21:09:05.043 に答える
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>';
}

不足している要素は、出力中に消えました。これがまだ実用的なアプローチであるかどうかはわかりません。

于 2012-11-11T21:18:15.590 に答える