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";
}
我目前正在努力排除要保存到数组中的空行 $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";
}