- Работа с массивами PHP – создание, наполнение, удаление
- Создание массивов
- Создать массив и заполнить его значениями
- Результат:
- Результат:
- Узнать количество элементов в массиве
- Добавление элементов в массив
- Добавить значение в начало массива
- Результат:
- Добавить значение в конец массива
- Результат:
- Получение данных из массива
- Получить первый элемент массива
- Получить последний элемент массива
- Получить часть (срез) массива
- Результат:
- Извлечь первый элемент массива
- Результат:
- Извлечь последний элемент массива
- Результат:
- Извлечь часть массива
- Результат:
- Выбрать все значения из массива
- Результат:
- Выбрать все ключи массива
- Результат:
- Выбирать случайные значения из массива
- Поиск и проверка элементов в массиве
- Проверить, есть ли значение в массиве
- Проверить, есть ли ключ в массиве
- Удаление элементов из массива
- Результат:
- Удаление пустых значений
- Результат:
- Массивы в PHP
- Что такое массив
- Создание массива
- Ключи и значения массива
- Простые и ассоциативные массивы
- Вывод массива
- Добавление и удаление элементов
- Двумерные и многомерные массивы
- Задача 1
- Задача 2
- array_slice
- Описание
- Список параметров
- Возвращаемые значения
- Примеры
- Смотрите также
- User Contributed Notes 19 notes
Работа с массивами PHP – создание, наполнение, удаление
Основные примеры работы с массивами PHP. Создание, наполнение, извлечение удаление значений.
Создание массивов
Создать массив и заполнить его значениями
Можно применить функцию array_fill($start, $size, $value) , которая создаст массив с количеством $size элементов со значением $value , начиная с индекса $start .
Данный пример создает массив с тремя элементам «текст», ключи которых будут начинаться с нуля.
Результат:
Еще вариант – функция explode($delimiter, $string) , которая из строки $string создаст массив используя разделитель $delimiter , в данном примере запятая.
Результат:
Узнать количество элементов в массиве
Если массив ассоциативный (многомерный), то count() вернёт количество элементов только первого уровня. Чтобы получит количество всех элементов нужно использовать константу COUNT_RECURSIVE .
Добавление элементов в массив
Добавить значение в начало массива
array_unshift($array, $value) – добавляет одно или несколько элементов в начало массива.
Результат:
Добавить значение в конец массива
array_push($array, $value) – добавляет значение в конец массива.
Результат:
Получение данных из массива
Получить первый элемент массива
Получить последний элемент массива
Получить часть (срез) массива
array_slice($array, $offset, $length) возвращает часть массива начиная с индекса $offset длиной $length .
- Если $offset отрицательный, то отчет начинается с конца массива.
- $length можно не указывать, тогда функция вернет все элементы до конца массива начиная с индекса $offset .
Результат:
Извлечь первый элемент массива
array_shift($array) – извлекает первый элемент из массива $array и возвращает его значение.
Результат:
Извлечь последний элемент массива
array_pop($array) – извлекает последний элемент из массива $array и возвращает его значение.
Результат:
Извлечь часть массива
Чтобы извлечь из массива часть можно применить функции array_slice() и array_diff() .
Результат:
Выбрать все значения из массива
array_values($array) – создает новый массив из исходного $array игнорируя его ключи.
Результат:
Выбрать все ключи массива
array_keys($array) – создает новый массив состоящий из ключей исходного массива.
Результат:
Выбирать случайные значения из массива
array_rand($array, $count) возвращает случайным образом один или несколько ключей из массива $array . Если $count больше единицы, то результат будет в виде массива.
Поиск и проверка элементов в массиве
Проверить, есть ли значение в массиве
Проверить, есть ли ключ в массиве
Удаление элементов из массива
unset() – удаляет переменные и элементы массива по ключу.
В первом примере элемент удаляется по ключу, во втором по значению:
Результат:
Удаление пустых значений
В PHP нет отдельной функции для удаления пустых значений в массиве, поэтому применяют array_diff() которая возвращает расхождения массивов.
Результат:
Если требуется удалить значения включая 0 , null , array() и т.д. можно применить следующее:
Источник
Массивы в PHP
Что такое массив
Массив — это переменная, которая может содержать в себе сразу несколько значений.
Например, так можно объявить массив с тремя значениями:
В коде выше мы создаём переменную $heroes и добавляем в неё 3 строки.
Массивы также отлично подходят для объединения нескольких связанных между собой значений, например характеристик товара:
Создание массива
Для создания пустого массива просто укажите квадратные скобки вместо значения:
Результат в браузере:
PHP сообщает нам, что в переменной лежит массив (англ. array), в котором находится 0 значений.
Чтобы объявить массив с данными, просто перечислите значения в квадратных скобках:
Теперь в переменной $brands лежит массив, состоящий из трёх элементов.
Создание массивов с помощью квадратных скобок работает начиная с версии PHP 5.4. До этого использовался более громоздкий синтаксис:
Ключи и значения массива
Массив состоит из ключей (индексов) и соответствующих им значений. Это можно представить как таблицу:
Ключ | Значение |
---|---|
0 | Samsung |
1 | Apple |
2 | Nokia |
У каждого значения есть свой ключ. В массиве не может быть несколько одинаковых ключей.
Вернёмся к предыдущему примеру и посмотрим, что лежит в массиве:
Результат в браузере:
Когда мы создаём массив без указания ключей, PHP генерирует их автоматически в виде чисел, начиная с 0.
Указание ключей происходит с помощью конструкции => :
Простые и ассоциативные массивы
Когда мы создаём массив с числовыми ключами, такой массив называется простым или числовым.
Когда мы создаём массив и указываем строковые ключи вручную, такой массив называется ассоциативным, поскольку по названию ключа можно понять назначение этого значения — название товара, возраст человека и т.д.
Вывод массива
Вывод элементов массива выглядит следующим образом:
Для вывода содержимого массива можно использовать как уже знакомую нам функцию var_dump() , так и print_r() , которая предоставляет информацию о массивах в чуть более удобном для чтения виде.
Однако обе функции выводят информацию на одной строке, что в случае с массивами превращается в кашу. Чтобы этого не происходило, используйте тег ‘;
Результат в браузере:
Также вывести содержимое массива можно с помощью цикла foreach:
Подробней работу цикла foreach мы разберём в отдельном уроке.
Добавление и удаление элементов
Добавление новых элементов в массив выглядит следующим образом:
Но если название ключа не играет роли, его можно опустить:
Удалить элемент массива можно с помощью функции unset() :
Двумерные и многомерные массивы
В качестве значения массива мы можем передать ещё один массив:
В примере выше мы создали массив $human , а затем внутри него создали ещё один массив $human[‘hands’] . Результат в браузере:
Обратиться к элементу многомерного массива можно так:
Теперь мы можем хранить в одном массиве целую базу товаров:
Или альтернативный вариант:
Задача 1
1. Создайте массивы $user1 и $user2 , заполните ключи name и age в каждом массиве любыми значениями.
2. Увеличьте значение age у обоих массивов на 50%.
3. Выведите на экран значение ключа name обоих пользователей.
Задача 2
1. Создайте массив $city , добавьте в него ключ name с любым значением.
2. Создайте подмассив streets с любыми случайными улицами. Каждая улица должна иметь имя (name) и количество домов (buildings_count), а также подмассив из номеров домов (old_buildings), подлежащих сносу.
Источник
array_slice
(PHP 4, PHP 5, PHP 7, PHP 8)
array_slice — Выбирает срез массива
Описание
array_slice() возвращает последовательность элементов массива array , определённую параметрами offset и length .
Список параметров
Если параметр offset неотрицательный, последовательность начнётся на указанном расстоянии от начала array .
Если offset отрицательный, последовательность начнётся с конца array .
Обратите внимание, что параметр offset обозначает положение в массиве, а не ключ.
Если в эту функцию передан положительный параметр length , последовательность будет включать количество элементов меньшее или равное length .
Если количество элементов массива меньше чем параметр length , то только доступные элементы массива будут присутствовать.
Если в эту функцию передан отрицательный параметр length , последовательность остановится на указанном расстоянии от конца массива.
Если он опущен, последовательность будет содержать все элементы с offset до конца массива array .
Обратите внимание, что по умолчанию array_slice() сбрасывает ключи массива. Вы можете переопределить это поведение, установив параметр preserve_keys в true . Строковые ключи сохраняются, независимо от значения этого параметра.
Возвращаемые значения
Возвращает срез. Если смещение больше длины массива, то будет возвращён пустой массив.
Примеры
Пример #1 Пример использования array_slice()
= array( «a» , «b» , «c» , «d» , «e» );
$output = array_slice ( $input , 2 ); // возвращает «c», «d» и «e»
$output = array_slice ( $input , — 2 , 1 ); // возвращает «d»
$output = array_slice ( $input , 0 , 3 ); // возвращает «a», «b» и «c»
// обратите внимание на различия в индексах массивов
print_r ( array_slice ( $input , 2 , — 1 ));
print_r ( array_slice ( $input , 2 , — 1 , true ));
?>
Результат выполнения данного примера:
Пример #2 Пример использования array_slice() с одномерным массивом
Результат выполнения данного примера:
Пример #3 Пример использования array_slice() с массивом из смешанных ключей
Результат выполнения данного примера:
Смотрите также
- array_chunk() — Разбивает массив на части
- array_splice() — Удаляет часть массива и заменяет её чем-нибудь ещё
- unset() — Удаляет переменную
User Contributed Notes 19 notes
Array slice function that works with associative arrays (keys):
function array_slice_assoc($array,$keys) <
return array_intersect_key($array,array_flip($keys));
>
array_slice can be used to remove elements from an array but it’s pretty simple to use a custom function.
One day array_remove() might become part of PHP and will likely be a reserved function name, hence the unobvious choice for this function’s names.
function akrem($array,$key) <
$holding=array();
foreach($array as $k => $v) <
if($key!=$k) <
$holding[$k]=$v;
>
>
return $holding;
>
$lunch = array(‘sandwich’ => ‘cheese’, ‘cookie’=>’oatmeal’,’drink’ => ‘tea’,’fruit’ => ‘apple’);
echo »;
?>
(remove 9’s in email)
Using the varname function referenced from the array_search page, submitted by dcez at land dot ru. I created a multi-dimensional array splice function. It’s usage is like so:
$array[‘admin’] = array(‘blah1’, ‘blah2’);
$array[‘voice’] = array(‘blah3’, ‘blah4’);
array_cut(‘blah4’, $array);
. Would strip blah4 from the array, no matter where the position of it was in the array ^^ Returning this.
Array ( [admin] => Array ( [0] => blah1 [1] => blah2 ) [voice] => Array ( [0] => blah3 ) )
Here is the code.
function varname ( $var )
<
// varname function by dcez at land dot ru
return (isset( $var )) ? array_search ( $var , $GLOBALS ) : false ;
>
function array_cut ( $needle , $haystack )
<
foreach ( $haystack as $k => $v )
<
for ( $i = 0 ; $i count ( $v ); $i ++)
if ( $v [ $i ] === $needle )
<
return array_splice ( $GLOBALS [ varname ( $haystack )][ $k ], $i , 1 );
break; break;
>
>
?>
Check out dreamevilconcept’s forum for more innovative creations!
based on worldclimb’s arem(), here is a recursive array value removal tool that can work with multidimensional arrays.
function remove_from_array($array,$value) <
$clear = true;
$holding=array();
foreach($array as $k => $v) <
if (is_array($v)) <
$holding [$k] = remove_from_array ($v, $value);
>
elseif ($value == $v) <
$clear = false;
>
elseif($value != $v) <
$holding[$k]=$v; // removes an item by combing through the array in order and saving the good stuff
>
>
if ($clear) return $holding; // only pass back the holding array if we didn’t find the value
>
If you want an associative version of this you can do the following:
function array_slice_assoc($array,$keys) <
return array_intersect_key($array,array_flip($keys));
>
However, if you want an inverse associative version of this, just use array_diff_key instead of array_intersect_key.
function array_slice_assoc_inverse($array,$keys) <
return array_diff_key($array,array_flip($keys));
>
Array (
‘name’ = ‘Nathan’,
‘age’ = 20
)
Array (
‘age’ = 20,
‘height’ = 6
)
To save the sort order of a numeric index in the array. Version php =>5.5.26
/*
Example
*/
$arr = array( «1» =>2, «2» =>3 , «3» =>5 );
/**
* Reorders an array by keys according to a list of values.
* @param array $array the array to reorder. Passed by reference
* @param array $list the list to reorder by
* @param boolean $keepRest if set to FALSE, anything not in the $list array will be removed.
* @param boolean $prepend if set to TRUE, will prepend the remaining values instead of appending them
* @author xananax AT yelostudio DOT com
*/
function array_reorder (array & $array ,array $list , $keepRest = TRUE , $prepend = FALSE , $preserveKeys = TRUE ) <
$temp = array();
foreach( $list as $i ) <
if(isset( $array [ $i ])) <
$tempValue = array_slice (
$array ,
array_search ( $i , array_keys ( $array )),
1 ,
$preserveKeys
);
$temp [ $i ] = array_shift ( $tempValue );
unset( $array [ $i ]);
>
>
$array = $keepRest ?
( $prepend ?
$array + $temp
: $temp + $array
)
: $temp ;
>
array_reorder($a,$order,TRUE);
echo »;
/** exemple end **/
?>
If you want to remove a specified entry from an array i made this mwethod.
= array( «Entry1» , «entry2» , «entry3» );
$int = 3 ; //Number of entries in the array
$int2 = 0 ; //Starter array spot. it will begine its search at 0.
$del_num = 1 ; //Represents the second entry in the array. which is the one we will happen to remove this time. i.e. 0 = first entry, 1 = second entry, 2 = third.
$newarray = array(); //Empty array that will be the new array minus the specified entry.
print_r ( $array ) . «
» ; //print original array contents
print_r ( $newarray ). «
» ; //print the new empty array
do
<
$user = $array [ $int2 ];
$key = array_search ( $user , $array );
if ( $key == $del_num )
<
$int2 = $int2 + 1 ;
> while ( $int2 $int );
print_r ( $newarray ). «
» ; //print the new array
I was trying to find a good way to find the previous several and next several results from an array created in a MySQL query. I found that most MySQL solutions to this problem were complex. Here is a simple function that returns the previous and next rows from the array.
/*
** function array_surround by Jamon Holmgren of ClearSight Design
** Version 1.0 — 4/10/2009
** Please direct comments and questions to my first name at symbol clearsightdesign.com
**
** Returns an array with only the $before and $after number of results
** This is set to work best with MySQL data results
** Use this to find the rows immediately before and after a particular row, as many as you want
**
** Example usage:
** $mysql_ar is an array of results from a MySQL query and the current id is $cur_id
** We want to get the row before this one and five rows afterward
**
** $near_rows = array_surround($mysql_ar, «id», $cur_id, 1, 5)
**
** Previous row is now $near_rows[-1]
** Current row is now $near_rows[0]
** Next row is $near_rows[1] . etc
** If there is no previous row, $near_rows[-1] will not be set. test for it with is_array($near_rows[-1])
**
*/
function array_surround ( $src_array , $field , $value , $before = 1 , $after = 1 ) <
if( is_array ( $src_array )) <
// reset all the keys to 0 through whatever in case they aren’t sequential
$new_array = array_values ( $src_array );
// now loop through and find the key in array that matches the criteria in $field and $value
foreach( $new_array as $k => $s ) <
if( $s [ $field ] == $value ) <
// Found the one we wanted
$ck = $k ; // put the key in the $ck (current key)
break;
>
>
if(isset( $ck )) < // Found it!
$result_start = $ck — $before ; // Set the start key
$result_length = $before + 1 + $after ; // Set the number of keys to return
if( $result_start 0 ) < // Oops, start key is before first result
$result_length = $result_length + $result_start ; // Reduce the number of keys to return
$result_start = 0 ; // Set the start key to the first result
>
$result_temp = array_slice ( $new_array , $result_start , $result_length ); // Slice out the results we want
// Now we have an array, but we want array[-$before] to array[$after] not 0 to whatever.
foreach( $result_temp as $rk => $rt ) < // set all the keys to -$before to +$after
$result [ $result_start — $ck + $rk ] = $rt ;
>
return $result ;
> else < // didn't find it!
return false ;
>
> else < // They didn't send an array
return false ;
>
>
?>
I hope you find this useful! I welcome constructive criticism or comments or of course praise 😉 — just e-mail me.
Sometimes you need to pick certain non-integer and/or non-sequential keys out of an array. Consider using the array_pick() implementation below to pull specific keys, in a specific order, out of a source array:
= array ( ‘a’ => 1 , ‘b’ => 2 , ‘c’ => 3 , ‘d’ => 4 );
$b = array_pick ( $a , array ( ‘d’ , ‘b’ ));
// now:
// $a = array (‘a’ => 1, ‘c’ => ‘3’);
// $b = array (‘d’ => 4, ‘b’ => ‘2’);
if (! ( is_array ( $keys ) || is_scalar ( $keys ))) <
trigger_error ( ‘Second parameter must be an array of keys or a scalar key’ , E_USER_ERROR );
return false ;
>
if ( is_array ( $keys )) <
// nothing to do
> else if ( is_scalar ( $keys )) <
$keys = array ( $keys );
>
$resultArray = array ();
foreach ( $keys as $key ) <
if ( is_scalar ( $key )) <
if ( array_key_exists ( $key , $array )) <
$resultArray [ $key ] = $array [ $key ];
unset( $array [ $key ]);
>
> else <
trigger_error ( ‘Supplied key is not scalar’ , E_USER_ERROR );
return false ;
>
>
Источник