Php array убрать пустые значения

Содержание
  1. Как удалить пустые элементы в массиве вместе с ключами?
  2. 6 ответов 6
  3. Похожие
  4. Подписаться на ленту
  5. Работа с массивами PHP – создание, наполнение, удаление
  6. Создание массивов
  7. Создать массив и заполнить его значениями
  8. Результат:
  9. Результат:
  10. Узнать количество элементов в массиве
  11. Добавление элементов в массив
  12. Добавить значение в начало массива
  13. Результат:
  14. Добавить значение в конец массива
  15. Результат:
  16. Работа с ключами массива
  17. Поучить первый ключ массива
  18. Поучить последний ключ массива
  19. Переопределить ключи массива
  20. Результат:
  21. Результат:
  22. Получение элементов из массива
  23. Получить первый элемент массива
  24. Получить последний элемент массива
  25. Получить часть (срез) массива
  26. Результат:
  27. Извлечь первый элемент массива
  28. Результат:
  29. Извлечь последний элемент массива
  30. Результат:
  31. Извлечь часть массива
  32. Результат:
  33. Выбрать все значения из массива
  34. Результат:
  35. Выбрать все ключи массива
  36. Результат:
  37. Выбирать случайные значения из массива
  38. Поиск и проверка элементов в массиве
  39. Проверить, есть ли значение в массиве
  40. Проверить, есть ли ключ в массиве
  41. Удаление элементов из массива
  42. Результат:
  43. Удаление пустых значений
  44. Результат:
  45. Удалить повторяющиеся значения массива
  46. Результат:
  47. Объединение массивов
  48. Результат:
  49. Разделить массив на части
  50. Результат:
  51. Результат:
  52. How to remove null values from an array? [duplicate]
  53. 6 Answers 6

Как удалить пустые элементы в массиве вместе с ключами?

unset удаляет только значение, а я хочу удалить еще и ключи. Что использовать для этого? Также хотелось бы узнать функцию, которая удалит все это дело полностью сама, без циклов, думаю, что такая есть, не так ли?

6 ответов 6

$new_array = array_filter($old_array, function($element) < return !empty($element); >); 
$new_array = array_diff($old_array, array('')); 

В каких случаях empty( $x) != (FALSE === $x)` ? Можно не указывать ф-ю, т.к. по умолчанию array_filter() удаляет элементы, которые == FALSE : $new_array = array_filter( $old_array);

Зачем? empty( 0); // TRUE 0 == FALSE; // TRUE Я просто предлагаю сократить код, убрав ненужную ф-ю проверки.

Читайте также:  Python run class in thread

В зависимости от того, что считается «пустым» элементом, можно еще такой вариант предложить:

 [1] => a [2] => 0 [3] => 2 [4] => d [5] => [6] => p [7] => [8] => [9] => c [10] => 3 [11] => 0 ) Array ( [1] => a [2] => 0 [3] => 2 [4] => d [6] => p [9] => c [10] => 3 [11] => 0 ) 

Зашел посмотреть на решение достаточно насущной проблемы. Беглым взглядом окинул топик и увидел, что нормального решения пока нет. Сочинил следующее:

 foreach($old_array as $element) < if(!empty($element))< $new_array[] = $element; >> 

Не изящно, но очень просто и, главное, работает 🙂

Хотелось бы отметить что далеко не всегда такого кода достаточно:

$new_array = array_diff($old_array, array('')); 

Например так мы например можем нарваться на неприятности:

$new_array = array_diff(explode("/", "/level1/level2/"), array('')); 
Array ( [1] => level1 [2] => level2 ) 

Хотя на самом то деле хотели получить

Array ( [0] => level1 [1] => level2 ) 

По этому для таких случаев используем:

$new_array = array_values(array_diff(explode("/", "/level1/level2/"), array(''))); 
 $file = array_filter($file, function($element) < $element = trim($element); if(strlen($element)) return true; >); 

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.7.26.43545

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

Работа с массивами PHP – создание, наполнение, удаление

Основные примеры работы с массивами PHP. Создание, наполнение, извлечение удаление значений.

Создание массивов

Создать массив и заполнить его значениями

$array = array( 'яблоко', 'апельсин', 'виноград' ); // или $array = array(); $array[] = 'яблоко'; $array[] = 'апельсин'; $array[] = 'виноград';

Можно применить функцию array_fill($start, $size, $value) , которая создаст массив с количеством $size элементов со значением $value , начиная с индекса $start .

Данный пример создает массив с тремя элементам «текст», ключи которых будут начинаться с нуля.

$array = array_fill(0, 3, 'текст'); print_r($array);

Результат:

Array ( [0] => текст [1] => текст [2] => текст )

Еще вариант – функция explode($delimiter, $string) , которая из строки $string создаст массив используя разделитель $delimiter , в данном примере запятая.

$array = explode(',', 'текст 1,текст 2,текст 3'); print_r($array);

Результат:

Array ( [0] => текст 1 [1] => текст 2 [2] => текст 3 )

Узнать количество элементов в массиве

echo count($array); // или echo sizeof($array);

Если массив ассоциативный (многомерный), то count() вернёт количество элементов только первого уровня. Чтобы получит количество всех элементов нужно использовать константу COUNT_RECURSIVE .

$array = array( array( 'яблоко', 'апельсин', 'виноград' ), array( 'яблоко', 'апельсин', 'виноград' ) ); echo count($array); // вернет 2 echo count($array, COUNT_RECURSIVE); // вернет 8

Добавление элементов в массив

Добавить значение в начало массива

array_unshift($array, $value) – добавляет одно или несколько элементов в начало массива.

$array = array( 'яблоко', 'апельсин', 'виноград' ); array_unshift($array, 'банан'); print_r($array);

Результат:

Array ( [0] => банан [1] => яблоко [2] => апельсин [3] => виноград )

Добавить значение в конец массива

array_push($array, $value) – добавляет значение в конец массива.

$array = array( 'яблоко', 'апельсин', 'виноград' ); array_push($array, 'банан'); // или $array[] = 'банан'; print_r($array);

Результат:

Array ( [0] => яблоко [1] => апельсин [2] => виноград [3] => банан [4] => банан )

Работа с ключами массива

Поучить первый ключ массива

Функция array_key_first($array) — получает первый ключ массива. Появилась в версии PHP 7.3, для более ранних версий:

if (!function_exists('array_key_first')) < function array_key_first(array $arr) < foreach($arr as $key =>$unused) < return $key; >return null; > >
$array = array( 1 => 'яблоко', 3 => 'апельсин', 5 => 'виноград' ); echo array_key_first($array); // 1

Поучить последний ключ массива

Функция array_key_last($array) — получает последний ключ массива. Появилась в версии PHP 7.3, для более ранних версий:

if (!function_exists('array_key_last')) < function array_key_last($array) < if (!is_array($array) || empty($array)) < return NULL; >return array_keys($array)[count($array) - 1]; > >
$array = array( 1 => 'яблоко', 3 => 'апельсин', 5 => 'виноград' ); echo array_key_last($array); // 5

Переопределить ключи массива

К примеру, после удаления элемента массива сбивается нумерация ключей и нужно назначить новую нумерацию:

$array = array( 1 => 'яблоко', 3 => 'апельсин', 5 => 'виноград' ); $new = array_values($array); print_r($new);

Результат:

Array ( [0] => яблоко [1] => апельсин [2] => апельсин )

Начало нумерации ключей с единицы:

$array = array( 1 => 'яблоко', 3 => 'апельсин', 5 => 'виноград' ); $new = array_combine(range(1, count($array)), $array); print_r($new);

Результат:

Array ( [1] => яблоко [2] => апельсин [3] => апельсин )

Получение элементов из массива

Получить первый элемент массива

$array = array( 'яблоко', 'апельсин', 'виноград' ); reset($array); $first = current($array); // яблоко

Получить последний элемент массива

$array = array( 'яблоко', 'апельсин', 'виноград' ); $end = end($array); // виноград

Получить часть (срез) массива

array_slice($array, $offset, $length) возвращает часть массива начиная с индекса $offset длиной $length .

  • Если $offset отрицательный, то отчет начинается с конца массива.
  • $length можно не указывать, тогда функция вернет все элементы до конца массива начиная с индекса $offset .
$array = array( 'яблоко', 'апельсин', 'виноград' ); $new = array_slice($array, 0, 2); print_r($new);

Результат:

Array ( [0] => яблоко [1] => апельсин )

Извлечь первый элемент массива

array_shift($array) – извлекает первый элемент из массива $array и возвращает его значение.

$array = array( 'яблоко', 'апельсин', 'виноград' ); $first = array_shift($array); // яблоко print_r($array);

Результат:

Array ( [0] => апельсин [1] => виноград )

Извлечь последний элемент массива

array_pop($array) – извлекает последний элемент из массива $array и возвращает его значение.

$array = array( 'яблоко', 'апельсин', 'виноград' ); $end = array_pop($array); // виноград print_r($array);

Результат:

Array ( [0] => яблоко [1] => апельсин )

Извлечь часть массива

Чтобы извлечь из массива часть можно применить функции array_slice() и array_diff() .

$array = array( 'яблоко', 'апельсин', 'виноград' ); $new = array_slice($array, 0, 2); $array = array_diff($array, $new); print_r($new); print_r($array);

Результат:

Array ( [0] => яблоко [1] => апельсин ) Array ( [2] => виноград )

Выбрать все значения из массива

array_values($array) – создает новый массив из исходного $array игнорируя его ключи.

$array = array( 'key 1' => 'яблоко', 'key 2' => 'апельсин', 'key 3' => 'виноград' ); $new = array_values($array); print_r($new);

Результат:

Array ( [0] => яблоко [1] => апельсин [2] => виноград )

Выбрать все ключи массива

array_keys($array) – создает новый массив состоящий из ключей исходного массива.

$array = array( 'key 1' => 'яблоко', 'key 2' => 'апельсин', 'key 3' => 'виноград' ); $new = array_keys($array); print_r($new);

Результат:

Array ( [0] => key 1 [1] => key 2 [2] => key 3 )

Выбирать случайные значения из массива

array_rand($array, $count) возвращает случайным образом один или несколько ключей из массива $array . Если $count больше единицы, то результат будет в виде массива.

$array = array( 3 => 'яблоко', 1 => 'апельсин', 5 => 'виноград' ); echo $array[array_rand($array)];

Поиск и проверка элементов в массиве

Проверить, есть ли значение в массиве

$array = array( 'яблоко', 'апельсин', 'виноград' ); if (in_array('апельсин', $array)) < echo 'Найдено значение "апельсин"'; >// или if (array_search('апельсин', $array) !== false)

Проверить, есть ли ключ в массиве

$array = array( 1 => 'яблоко', 2 => 'апельсин', 3 => 'виноград' ); if (array_key_exists(2, $array)) < echo 'Найден ключ 2'; >// или if (isset($array[2]))

Удаление элементов из массива

unset() – удаляет переменные и элементы массива по ключу.

В первом примере элемент удаляется по ключу, во втором по значению:

$array = array( 'яблоко', 'апельсин', 'виноград' ); // Удаление по ключу unset($array[1]); // Удаление по значению unset($array[array_search('апельсин', $array)]); print_r($array);

Результат:

Array ( [0] => яблоко [2] => виноград )

Удаление пустых значений

В PHP нет отдельной функции для удаления пустых значений в массиве, поэтому применяют array_diff() которая возвращает расхождения массивов.

$array = array( 'яблоко', '', 'виноград' ); $array = array_diff($array, array('')); print_r($array);

Результат:

Array ( [0] => яблоко [2] => виноград )

Если требуется удалить значения включая 0 , null , array() и т.д. можно применить следующее:

$array = array_diff($array, array('', ' ', null, 0, array()));

Удалить повторяющиеся значения массива

$array = array( 'яблоко', 'яблоко', 'апельсин', 'виноград' ); $array = array_unique($array); print_r($array);

Результат:

Array ( [0] => яблоко [2] => апельсин [3] => виноград )

Объединение массивов

Объединить два и более массивов поможет функция array_merge($array_1, $array_2, . ) .

$array_1 = array( 'яблоко', 'апельсин', 'виноград' ); $array_2 = array( 'помидор', 'огурец', ); $new = array_merge($array_1, $array_2); print_r($new);

Результат:

Array ( [0] => яблоко [1] => апельсин [2] => виноград [3] => помидор [4] => огурец )

Разделить массив на части

array_chunk($array, $size) – создает новый многомерный массив из исходного, деля его на равные части.

В данном примере указано $size = 3 , поэтому получается четыре подмассива в каждом из которых по три элемента.

$array = array( 'январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'ноябрь', 'декабрь', ); $array = array_chunk($array, 3); print_r($array);

Результат:

Array ( [0] => Array ( [0] => январь [1] => февраль [2] => март ) [1] => Array ( [0] => апрель [1] => май [2] => июнь ) [2] => Array ( [0] => июль [1] => август [2] => сентябрь ) [3] => Array ( [0] => ноябрь [1] => декабрь ) )

Если требуется разделить массив на определенное количество частей поможет следующий прием:

$array = array( 'январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'ноябрь', 'декабрь', ); $array = array_chunk($array, ceil(count($array) / 3)); print_r($array);

Результат:

Array ( [0] => Array ( [0] => январь [1] => февраль [2] => март [3] => апрель ) [1] => Array ( [0] => май [1] => июнь [2] => июль [3] => август ) [2] => Array ( [0] => сентябрь [1] => ноябрь [2] => декабрь ) )

Источник

How to remove null values from an array? [duplicate]

I have an array Array ( [0] => 0 [1] => [2] => 3 [3] => ) i want to remove null values from this and the result should be like this Array ( [0] => 0 [1] => 3) i don’t want to remove 0 value from array.

6 Answers 6

array_filter($arr, static function($var) ); 
function is_not_null ($var) < return !is_null($var); >$filtered = array_filter($arr, 'is_not_null'); 

@AlexP nope, you are wrong. as seen on 3v4l.org/Y9KCX your solution would remove everything that is empty() — not just NULL.

You can use array_filter() which will get rid of the null empty values from the array

print_r(array_filter($arr, 'strlen')); 

This does not work. $ php -r «var_dump(array_filter([0, null, false, ‘hi’, »], ‘strlen’));» array(2) < [0] =>int(0) [3] => string(2) «hi» >

From PHP8.1 this is no longer a good technique because it will generate Deprecations. Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated

You can just loop through it.

If you want to reindex the array to remove gaps between keys, you can just use a new array:

You are in a world of trouble now, because it is not too easy to distinguish null from 0 from false from «» from 0.0. But don’t worry, it is solvable:

 $result = array_filter( $array, 'strlen' ); 

Which is horrible by itself, but seems to work.

This is bad advice, because the trick leans on a strange corner case:

  • strlen(0) will be strlen(«0») -> 1, thus true
  • strlen(NULL) will be strlen(«»)->0, thus false
  • strlen(«») will be strlen((«»)->0, thus false etc.

The way you should do it is something like this:

 $my_array = array(2, "a", null, 2.5, NULL, 0, "", 8); function is_notnull($v) < return !is_null($v); >print_r(array_filter($my_array, "is_notnull")); 

Источник

Оцените статью