Я в настоящее время борюсь с исключением пустых строк, которые будут сохранены в массив $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 отделка должен работать, нет никаких причин, почему он не должен работать для вас. Если у вас есть переменная, содержащая строку типа «Имя, Фамилия», то использование этой функции превратит ее в «Имя, Фамилия».
Кажется, вы разделяете каждый фрагмент данных пробелами … это не очень хорошая идея, учитывая, что ваши данные могут включать пробелы (в именах также могут быть пробелы, например, Мэри Джейн).
Вы можете найти и удалить пустые строки с помощью следующего регулярного выражения:
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";
}