2014-12-01 3 views
0

У меня есть этот список с разделителями-запятыми 0,0,0,0,5,0,7,8,9,10, и я хотел бы избавиться от нулевого числа, представленного как число справа, а не нуля в 10.Как удалить определенный номер из списка номеров с разделителями-запятыми

Список представлен в переменной $str, и это код, который я пытаюсь удалить с нуля.

$str; 

$myArray = explode(',', $str); 

if (($key = array_search('0', $myArray)) !== false) { 
    unset($myArray[$key]); 
} 
print_r($myArray); 
$csv = implode(', ', $myArray); 
echo $csv; 

, но это дает 0, 0, 0, 5, 0, 7, 8, 9, 10

Этот код не делает работу, как я бы liked.What я могу сделать, чтобы избавиться от нулей ?.

+0

для получения правильного вывода вы должны переиндексировать массив после 'unset':' if (($ key = array_search ('0', $ myArray))! == false) { unset ($ myArray [$ key]); } $ myArray = array_values ​​($ myArray); print_r ($ myArray); ' – Banzay

ответ

6

array_filter приходит на помощь:

$myArray = explode(',', '0,0,0,0,5,0,7,8,9,10'); 
print_r(array_filter($myArray, function($el) { return $el; })); 
// ⇒ 
/* 
Array 
(
    [4] => 5 
    [6] => 7 
    [7] => 8 
    [8] => 9 
    [9] => 10 
) 
*/ 
+3

На самом деле вам не нужно передавать обратный вызов, потому что если обратный вызов не указан, все записи, равные' false', будут удалены. –

+0

Я знаю; Я просто хотел предоставить более общее решение (например, OP хочет удалить «1» или подобное.) – mudasobwa

-1

Использование str_replace функции - отлично работает, и это не сильно отличается от вас кода, так что вы не будете вносить изменения только вы должны добавить функцию str_replace:

$myArray = explode(',', str_replace(array(' 0,',',0'), '',$str)); 

if (($key = array_search('0', $myArray)) !== false) { 
    unset($myArray[$key]); 
} 
print_r($myArray); 
$csv = implode(', ', $myArray); 
echo $csv; 
+0

'str_replace ('0,', '', $ str)' оставит неизменяемый нулевой конец. – mudasobwa

+0

Я имею в виду, что ваш код ** терпит неудачу ** на ''0,5,0,7,8,9,10,5,0'' и ест нули от' 10', '20' и т. Д. – mudasobwa

+0

Неправильно. Не могли бы вы ** проверить ** «решение» перед тем, как вставить его? ''0,5,0,7,8,9,10,5,0' ⇒ '5,7,8,9,15'' – mudasobwa

Смежные вопросы