[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Убрать побелы и пустые значения из массива
Страницы: 1, 2
MailRes
Ребята, всем привет!

Подскажите как убрать пробелы и пустые значения из массива, есть массив:

$a[0]=" помидорка";
$a[1]="";
$a[2]="огурец ";
$a[3]=" апельсин ";
$a[4]=" ";
....

$a[n]="что-то еще";


Как рационально решить задачу по избавлению от лишних пробелов и "пустых" значений массива?

У меня есть такое решение, но наверняка есть проще:

unset($b);
for ($i=0; $i<count($a); $i++)
{
if (trim($a[$i])=="")
{ // ничего не делаем }
else
{ $b[]=trim($a[$i]);}
}

unset($a);
// далее продолжаем работу с массивом $b :)
Arh
$array = array(1,2,3,'',5,' ',6);
$array = array_diff($array,array('',' '));


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
johniek_comp
Arh
arraymap уместнее в данном случае

_____________
user posted image
GET
foreach($a as $i=>$val)if(empty(trim($val)))unset($a[$i]);//правда если будет строка "0" ее тоже вырежет


тогда даже так:

foreach($a as $i=>$val)if(trim($val)=='')unset($a[$i]);


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
MailRes
Arh, спасибо, пустые значения исчезли, а лишние пробелы остались. Их trim(-ом) убирать?
Arh
Цитата (MailRes @ 26.11.2014 - 19:21)
Arh, спасибо, пустые значения исчезли, а лишние пробелы остались. Их trim(-ом) убирать?

$array = array(1,2,3,'',5,' ',6);
$array = array_diff($array,array('',' '));
array_map($array, create_function('&$val', '$val = trim($val);'));


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
rooor
Цитата (ABC @ 26.11.2014 - 19:19)
if(empty(trim($val))

раньше вываливало ошибку, сейчас не проверял
Arh
Ой только walk а не map, запутали)

$array = array(1,2,3,'',5,' ',6);
$array = array_diff($array,array('',' '));
array_walk($array, create_function('&$val', '$val = trim($val);'));
print_r($array);


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
FatCat
Я бы "в лоб" сделал:
foreach($a as $k=>$v)
{
if(trim($v))$a[$k] = trim($v);
else unset($a[$k]);
}


_____________
Бесплатному сыру в дырки не заглядывают...
MailRes
Arh, спасибо, то что нужно! :)

За участие всем спасибо!)

Теперь нужно поизучать матчасть, сначала пробовал через array_diff, но с параметрами намудрил, было
$array = array_diff(" ",$array);

и не работало.

Попробую теперь разобраться, как она действительно работает и что за новые для меня array_walk и create_function :)

Мой изначальный пример решения плох, потому что "на простоязычном написан"?) И выполняется дольше?
Arh
Цитата (FatCat @ 26.11.2014 - 19:31)
Я бы "в лоб" сделал:
foreach($a as $k=>$v)
{
if(trim($v))$a[$k] = trim($v);
else unset($a[$k]);
}

$a = array(' 0',2,3,'',5,' ',6);
foreach($a as $k=>$v)
{
if(trim($v))$a[$k] = trim($v);
else unset($a[$k]);
}
print_r($a);


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
GET
Цитата
foreach($a as $i=>$val)if(trim($val)=='')unset($a[$i]);



_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
$ss=0;
do{
$array = array(1,2,3,'',5,' ',6);

foreach($array as $i=>$val)if(trim($val)=='')unset($array[$i]);

/* $array = array_diff($array,array('',' '));
array_walk($array, create_function('&$val', '$val = trim($val);'));*/


$ss++;

}while($ss<10000);

print_r($array);


foreach: 0.33//быстрее на 260%
array_walk: 0.87


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
chee
MailRes,

<?php
$a[0]=" помидорка";
$a[1]="";
$a[2]="огурец ";
$a[3]=" апельсин ";
$a[4]=" ";

$b = array_filter($a, function ($value) {
return (bool) trim($value);
});

var_dump($b);


http://ideone.com/S9cA3p

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
FatCat
Цитата (Arh @ 26.11.2014 - 18:34)
$a = array(' 0',2,3,'',5,' ',6);
foreach($a as $k=>$v)
{
if(trim($v))$a[$k] = trim($v);
else unset($a[$k]);
}
print_r($a);

О нуле в строке я не подумал.
Тогда так:
$a = array(' 0',2,3,'',5,' ',6);
foreach($a as $k=>$v)
{
if(strlen(trim($v)))$a[$k] = trim($v);
else unset($a[$k]);
}
print_r($a);


_____________
Бесплатному сыру в дырки не заглядывают...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.