PHP: при обрезке сохраняйте пустые строки и вставляйте их в массив

Вопрос:

У меня есть следующий скрипт PHP, который берет данные, вставленные из <textarea>, который был отправлен методом post, затем сохраняет каждую строку в массив.

$companies_list = trim($_POST['companies']);
$companies_list = explode ("\n", $companies_list);
$companies_list = array_filter($companies_list, 'trim');
$companies_list_array = array();

foreach ($companies_list as $line) {
$companies_list_array[] = $line;
}

Например, он принимает следующий список

CompanyA
CompanyB
CompanyC
CompanyD

и сохраняет его

$companies_list_array = array( "CompanyA", "CompanyB", "CompanyC", "CompanyD");

Это все отлично, но если есть пустая строка, они не интересуются массивом как значением. Как я могу это сделать?

Например, если список компаний выглядит следующим образом:

CompanyA

CompanyB
CompanyC

CompanyD

Я хочу, чтобы скрипт сделал массив таким, как это

$companies_list_array = array( "CompanyA", "", "CompanyB", "CompanyC", "", "CompanyD");

Лучший ответ:

Вам нужно использовать array_walk() вместо array_filter(), потому что array_filter() будет оценивать возвращаемое значение функции фильтра как логическое. На пустых строках trim() вернет пустую строку, которая будет вычислять значение boolean false, и строка будет отброшена.

Используйте array_walk() следующим образом:

$lines = explode("\n", $_POST['companies']);
array_walk($lines, 'trim');

var_dump($lines);

Также обратите внимание, что я удалил ненужный код.

Вывод:

array(6) {
  [0] =>
  string(8) "CompanyA"
  [1] =>
  string(0) ""
  [2] =>
  string(8) "CompanyB"
  [3] =>
  string(8) "CompanyC"
  [4] =>
  string(0) ""
  [5] =>
  string(8) "CompanyD"
}

Ответ №1

Попробуйте следующее:

$companies_list = trim($_POST['companies']);
$companies_list = explode ("\n", $companies_list);
$companies_list_array = array();

foreach ($companies_list as $line) {
$companies_list_array[] = trim($line);
}

Ответ №2

Вы можете использовать preg_split

$companies_list = preg_split('/\n/', $_POST['companies']);

print_r($companies_list);

Ответ №3

Убирайте только при переходе по массиву:

$companies_list = explode ("\n", $_POST['companies']);
$companies_list_array = array();
foreach ($companies_list as $line) {
$companies_list_array[] = trim($line);
}

Ответ №4

array_filter удалит пустые значения. Вы можете попробовать с помощью array_map которые сохраняют пустые значения.

$companies_list_array = array( "CompanyA      ", "      ", "CompanyB", "CompanyC", "", "CompanyD");

$companies_list_array = array_map('trim', $companies_list_array);

Вывод:

array(6) { [0]=> string(8) "CompanyA" [1]=> string(0) "" [2]=> string(8) "CompanyB" [3]=> string(8) "CompanyC" [4]=> string(0) "" [5]=> string(8) "CompanyD" }

Оцените статью
TechArks.Ru
Добавить комментарий