Deleting/excluding 空行无法在 PHP 中保存和使用

Deleting/excluding empty lines from being saved and used in PHP

我目前正在努力排除要保存到数组中的空行 $presidents(通过这样做,解决了 foreach 循环回显没有名称的字符串的问题)。

我尝试了一些应该有效的方法,当然是我的业余爱好者(preg_match()trim() 等)。

有人可以帮我解决这个问题吗?

$file = fopen("namen2.txt", "r");
$presidents = array();
$count = count(file("namen2.txt"));
for($i = 1; $i <= $count;){
    $file_line = fgets($file);
    $line = explode(" ", $file_line);
    $president = array();
    $president["firstname"] = $line[0];
    if(empty($president["firstname"] == false)){
        $president["lastname"] = $line[1];
        $president["counter"] = $i;
        $presidents[] = $president;
        $i++;
    }
    else{echo "fehler";}
}
foreach($presidents as $president_order){
    echo "Hey ". $president_order["firstname"]. " ". $president_order["lastname"]. ", du bist der ". $president_order["counter"]. ". Präsident der USA in meiner Liste. \n";
}

编辑:我已经通过在插入阶段改变条件和控制我的输入解决了我的问题,感谢您的重要提示!

您应该在数据的插入阶段处理空格和不需要的字符,而不是之后,因此您应该返回到该代码并在插入发生之前清理数据。

使用 PHP 的 trim 应该可以,没有理由不适合您。如果您有一个变量,其中包含一个字符串,如“ Firstname Lastname ”,那么使用该函数会将其转换为 "Firstname Lastname"。

您似乎在用空格分隔每条数据...这不是一个好主意,因为您的数据可能必须包含空格(名字也可以有空格,例如 Mary Jane)。

您可以使用以下正则表达式来发现和删除空行:

preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $presidents);

由于它是一个数组,因此您可能需要遍历数组元素。

我没有测试这段代码,但它似乎是完成任务的更紧凑的方法。只需 trim() 并检查正字符串长度。我已将元素限制添加到 explode() 并压缩了您的数据存储语法。

$file=fopen("namen2.txt","r");
$i=0;  // initialize counter
while(!feof($file)){
    $line=trim(fgets($file));  // get line and trim leading/trailing whitespaces from it
    if(strlen($line)){  // if there are any non-whitespace characters, proceed
        $names=explode(' ',$line,2);  // max of two elements produced, in case: Martin Van Buren
        // explode will fail to correctly split: John Quincy Adams
        $presidents[]=['counter'=>++$i,'firstname'=>$names[0],'lastname'=>(isset($names[1])?$names[1]:'')];  // store the data for future processing
    }
}
fclose($file);

foreach($presidents as $pres){
    echo "Hey {$pres["firstname"]} {$pres["lastname"]}, du bist der {$pres["counter"]} Präsident der USA in meiner Liste.\n";
}