Как я могу удалить только пробельные элементы из массива? - PullRequest
2 голосов
/ 19 апреля 2011

Как я могу удалить все элементы массива, которые содержат только пробелы, не пробелы в элементе, подобном "foobar ", но только пустые элементы массива, такие как " "?

Спасибо.

Ответы [ 5 ]

6 голосов
/ 19 апреля 2011

preg_grep() - ваш друг.

$array = array("This", " ", "is", " ", "a", " ", "test.");

$array = preg_grep('/^\s*\z/', $array, PREG_GREP_INVERT);

var_dump($array);

CodePad .

При этом будут удалены все элементы массива, строка которых являетсяне заполнены или состоят только из пробелов согласно \s классу символов (пробелы, табуляции и разрывы строк).

Выходные данные

array(4) {
  [0]=>
  string(4) "This"
  [2]=>
  string(2) "is"
  [4]=>
  string(1) "a"
  [6]=>
  string(5) "test."
}
3 голосов
/ 19 апреля 2011
$arr = array("This", " ", "is", " ", "a", " ", "test.");
$result = array();
for($arr as $x) {
     if(!preg_match("/^\s*$/", $x)) $result[] = $x;
}
$arr = $result;
2 голосов
/ 19 апреля 2011

Этот код использует параметр обратного вызова для array_filter. Он зациклит массив, вызовет trim() для значения и удалит его, если полученное значение оценивается как false. (что будет пустой строкой)

$a = array_filter($a, 'trim');

0 голосов
/ 19 апреля 2011

foreach ($ arr as $ key => $ value)

{

 if($value=" ")

  {

unset ($ arr [$ key]);

/* optional */ array_values ​​ ($ arr);

  }

}
0 голосов
/ 19 апреля 2011
$array = array('foo','  ','bar ');

foreach ($array as $key => $value) {
    if (trim($value) == '') unset($array[$key]);
}

Массив при сбросе содержит:

array(2) {
  [0]=>
  string(3) "foo"
  [2]=>
  string(4) "bar "
}
...