从数组中删除[0]元素而不删除整个数组

时间:2012-08-08 20:06:57

标签: php arrays key

我正在尝试创建一个脚本来删除数组中的所有空元素。

然而,[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>

2 个答案:

答案 0 :(得分:4)

如果您只是删除空值,请尝试使用unset($idArray[$key])。如果您只想尝试删除整个第一个元素,请使用array_shift()

答案 1 :(得分: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");

?>