0

配列から空の要素を削除するスクリプトを作成しようとしています。

ただし、空の要素は [0] スロットにあるため、値を設定解除すると、配列全体が削除されます。少なくともそれが起こっていると思いますが、なぜこれが機能しないのですか?

<?php

$idfile = file_get_contents("datafile.dat");
$idArray = explode("\n", $idfile);
print_r($idArray);
foreach ($idArray as $key => &$value) {
    echo "Key is: ".$key." and value is: ".$value."<br />\n";
    if ($value == ""){
        echo "Killing value of ".$value."<br />";
        unset($value[$key]);
    }
    $value = str_replace("\n", "", $value);
    $value = str_replace("\r", "", $value);
    $value = $value.".dat";
}

print_r($idArray);
?>

出力は次のとおりです。

Array
(
    [0] => 
    [1] => test1
    [2] => test2
)
Key is: 0 and value is: <br>
Killing value of <br>
4

2 に答える 2

4

空の値を削除するだけの場合は、unset($idArray[$key])代わりに使用してみてください。最初の要素全体を削除しようとしている場合は、array_shift()

于 2012-08-08T20:10:30.887 に答える
1

別の良い解決策は、array_filter()メソッドを使用することです。これは、反復を処理し、フィルター処理された配列を返します。

<?php

function isNotEmpty($str)
{
    return strlen($str);
}

$idfile = file_get_contents("datafile.dat");
$idArray = explode("\n", $idfile);
$idArray = array_filter($idArray, "isNotEmpty");

?>
于 2012-08-08T20:14:59.220 に答える