- Массивы
- User Contributed Notes 17 notes
- PHP занятие 2. Массивы
- PHP: объявление массива
- Доступ к элементам массива
- Массивы
- Синтаксис
- Определение при помощи array()
- Доступ к элементам массива с помощью квадратных скобок
- Создание/модификация с помощью синтаксиса квадратных скобок
- Полезные функции
- Что можно и нельзя делать с массивами
- Почему $foo[bar] неверно?
- Преобразование в массив
- Сравнение
- Примеры
Массивы
User Contributed Notes 17 notes
For newbies like me.
Creating new arrays:-
//Creates a blank array.
$theVariable = array();
//Creates an array with elements.
$theVariable = array(«A», «B», «C»);
//Creating Associaive array.
$theVariable = array(1 => «http//google.com», 2=> «http://yahoo.com»);
//Creating Associaive array with named keys
$theVariable = array(«google» => «http//google.com», «yahoo»=> «http://yahoo.com»);
Note:
New value can be added to the array as shown below.
$theVariable[] = «D»;
$theVariable[] = «E»;
To delete an individual array element use the unset function
= array( «A» , «B» , «C» );
unset( $arr [ 1 ] );
// now $arr = array( «A», «C» );
?>
Unlink is for deleting files.
Using null as the key when setting an array value is NOT the same as using empty [].
= null ;
$testArray = [];
$testArray [ $null ] = 1 ;
$testArray [ $null ] = 2 ;
$testArray [ $null ] = 3 ;
$testArray [ $null ] = 4 ;
var_dump ( $testArray );
?>
Output:
array(1) <
» =>
int(4)
>
= [];
$testArray [ null ] = 1 ;
$testArray [ null ] = 2 ;
$testArray [ null ] = 3 ;
$testArray [ null ] = 4 ;
var_dump ( $testArray );
?>
Output:
array(1) <
» =>
int(4)
>
= [];
$testArray [] = 1 ;
$testArray [] = 2 ;
$testArray [] = 3 ;
$testArray [] = 4 ;
var_dump ( $testArray );
?>
Output:
array(4) <
[0] =>
int(1)
[1] =>
int(2)
[2] =>
int(3)
[3] =>
int(4)
>
output:
Array ( [0] => fileno [1] => Array ( [0] => uid [1] => uname ) [2] => topingid [3] => Array ( [0] => touid [1] => Array ( [0] => 1 [1] => 2 [2] => Array ( [0] => 3 [1] => 4 ) ) [2] => touname ) )
when I hope a function string2array($str), «spam2» suggest this. and It works well
hope this helps us, and add to the Array function list
Another way to create a multidimensional array that looks a lot cleaner is to use json_decode. (Note that this probably adds a touch of overhead, but it sure does look nicer.) You can of course add as many levels and as much formatting as you’d like to the string you then decode. Don’t forget that json requires » around values, not ‘!! (So, you can’t enclose the json string with » and use ‘ inside the string.)
print_r ( $myarray )
?>
returns:
Converting a linear array (like a mysql record set) into a tree, or multi-dimensional array can be a real bugbear. Capitalizing on references in PHP, we can ‘stack’ an array in one pass, using one loop, like this:
# array_stack()
# Original idea from:
# http://www.ideashower.com/our_solutions/
# create-a-parent-child-array-structure-in-one-pass/
function array_stack (& $a , $p = ‘@parent’ , $c = ‘@children’ )
<
$l = $t = array();
foreach ( $a AS $key => $val ):
if (! $val [ $p ]) $t [ $key ] =& $l [ $key ];
else $l [ $val [ $p ]][ $c ][ $key ] =& $l [ $key ];
$l [ $key ] = (array) $l [ $key ] + $val ;
endforeach;
return $a = array( ‘tree’ => $t , ‘leaf’ => $l );
>
# Example:
$node = array();
$node [ 1 ] = array( ‘@parent’ => 0 , ‘title’ => ‘I am node 1.’ );
# ^————————v Link @parent value to key.
$node [ 2 ] = array( ‘@parent’ => 1 , ‘title’ => ‘I am node 2.’ );
$node [ 3 ] = array( ‘@parent’ => 2 , ‘title’ => ‘I am node 3.’ );
$node [ 4 ] = array( ‘@parent’ => 1 , ‘title’ => ‘I am node 4.’ );
$node [ 5 ] = array( ‘@parent’ => 4 , ‘title’ => ‘I am node 5.’ );
$node [ ‘leaf’ ][ 1 ][ ‘title’ ] = ‘I am node one.’ ;
$node [ ‘leaf’ ][ 2 ][ ‘title’ ] = ‘I am node two.’ ;
$node [ ‘leaf’ ][ 3 ][ ‘title’ ] = ‘I am node three.’ ;
$node [ ‘leaf’ ][ 4 ][ ‘title’ ] = ‘I am node four.’ ;
$node [ ‘leaf’ ][ 5 ][ ‘title’ ] = ‘I am node five.’ ;
echo » ;
?>
Note that there’s no parameter checking on the array value, but this is only to keep the function size small. One could easily a quick check in there to make sure the $a parameter was in fact an array.
Hope you find it useful. Huge thanks to Nate Weiner of IdeaShower.com for providing the original function I built on.
If an array item is declared with key as NULL, array key will automatically be converted to empty string », as follows:
= array(
NULL => ‘zero’ ,
1 => ‘one’ ,
2 => ‘two’ );
// This will show empty string for key associated with «zero» value
var_dump ( array_keys ( $a ));
// Array elements are shown
reset ( $a );
while( key ( $a ) !== NULL )
<
echo key ( $a ) . «: » . current ( $a ) . «
» ; // PHP_EOL
next ( $a );
>
// Array elements are not shown
reset ( $a );
while( key ( $a ) != NULL ) // » == null => no iteration will be executed
<
echo key ( $a ) . «: » . current ( $a ) . «
» ; // PHP_EOL
next ( $a );
>
@jorge at andrade dot cl
This variant is faster:
function array_avg ( $array , $precision = 2 ) <
if(! is_array ( $array ))
return ‘ERROR in function array_avg(): this is a not array’ ;
foreach( $array as $value )
if(! is_numeric ( $value ))
return ‘ERROR in function array_avg(): the array contains one or more non-numeric values’ ;
$cuantos = count ( $array );
return round ( array_sum ( $array )/ $cuantos , $precision );
>
?>
A small correction to Endel Dreyer’s PHP array to javascript array function. I just changed it to show keys correctly:
function array2js($array,$show_keys)
<
$dimensoes = array();
$valores = array();
$total = count ($array)-1;
$i=0;
foreach($array as $key=>$value) <
if (is_array($value)) <
$dimensoes[$i] = array2js($value,$show_keys);
if ($show_keys) $dimensoes[$i] = ‘»‘.$key.'»:’.$dimensoes[$i];
> else <
$dimensoes[$i] = ‘»‘.addslashes($value).'»‘;
if ($show_keys) $dimensoes[$i] = ‘»‘.$key.'»:’.$dimensoes[$i];
>
if ($i==0) $dimensoes[$i] = ‘ <'.$dimensoes[$i];
if ($i==$total) $dimensoes[$i].= ‘>’;
$i++;
>
return implode(‘,’,$dimensoes);
>
Made this function to delete elements in an array;
function array_del_elm ( $input_array , $del_indexes ) <
if ( is_array ( $del_indexes )) <
$indexes = $del_indexes ;
> elseif( is_string ( $del_indexes )) <
$indexes = explode ( $del_indexes , » » );
> elseif( is_numeric ( $del_indexes )) <
$indexes [ 0 ] = (integer) $del_indexes ;
> else return;
$del_indexes = null ;
$cur_index = 0 ;
if ( sort ( $indexes )) for( $i = 0 ; $i count ( $input_array ); $i ++) <
if ( $i == $indexes [ $cur_index ]) <
$cur_index ++;
if ( $cur_index == count ( $indexes )) return $output_array ;
continue;
>
$output_array [] = $input_array [ $i ];
>
return $output_array ;
>
?>
but then i saw the methods of doing the same by Tyler Bannister & Paul, could see that theirs were faster, but had floors regarding deleting multiple elements thus support of several ways of giving parameters. I combined the two methods to this to this:
function array_del_elm ( $target_array , $del_indexes ) <
if ( is_array ( $del_indexes )) <
$indexes = $del_indexes ;
> elseif( is_string ( $del_indexes )) <
$indexes = explode ( $del_indexes , » » );
> elseif( is_numeric ( $del_indexes )) <
$indexes [ 0 ] = (integer) $del_indexes ;
> else return;
unset( $del_indexes );
for( $i = 0 ; $i count ( $indexes ); $i ++) <
unset( $target_array [ $indexes [ $i ]]);
>
return $target_array ;
>
?>
Fast, compliant and functional 😉
//Creating a multidimensional array
$theVariable = array( «Search Engines» =>
array (
0 => «http//google.com» ,
1 => «http//yahoo.com» ,
2 => «http//msn.com/» ),
«Social Networking Sites» =>
array (
0 => «http//www.facebook.com» ,
1 => «http//www.myspace.com» ,
2 => «http//vkontakte.ru» ,)
);
echo «The first array value is » . $theVariable [ ‘Search Engines’ ][ 0 ];
?>
— Output—
The first array value is http://google.com
function foo () <
return array( ‘name’ => ‘palma’ , ‘old’ => 23 , ‘language’ => ‘PHP’ );
>
/* 1. PHP $a = foo ();
var_dump ( $a [ ‘name’ ]);
/* 2. Works ini PHP >= 5.4.0 */
var_dump ( foo ()[ ‘name’ ]);
/*
When i run second method on PHP 5.3.8 i will be show error message «PHP Fatal error: Can’t use method return value in write context»
function array_mask (array $array , array $keys ) <
return array_intersect_key ( $array , array_fill_keys ( $keys , 0 ) );
>
?>
Might be helpful to take a part of associative array containing given keys, for example, from a $_REQUEST array
array_mask($_REQUEST, array(‘name’, ’email’));
Источник
PHP занятие 2. Массивы
PHP: объявление массива
Массивы с числовыми индексами
$fruits[0]=»яблоко»; $fruits[1]=»груша»; $fruits[2]=»апельсин»; $fruits[3]=»абрикос»;
Данный вариант инициализации массива сегодня практически не используется. Используется следующий вариант работы с массивами:
Данный вариант создания массива использует объект array :
$fruits = array( 1 => «яблоко», 2 => «груша», 3 => «апельсин», 4 => «абрикос» ); // Начиная с версии PHP 5.4 $fruits = array[ 1 => «яблоко», 2 => «груша», 3 => «апельсин», 4 => «абрикос» ];
Доступ к элементам массива
$fruits[0]=»яблоко»; $fruits[1]=»груша»; $fruits[2]=»апельсин»; $fruits[3]=»абрикос»; echo «Первый элемент массива — «. $fruits[0] .»
«; echo «Второй элемент массива — «. $fruits[1] .»
«; echo «Третий элемент массива — «. $fruits[2] .»
«;
Результатом выполнения программы будет:
$student = array( ‘Name’ => John, ‘Surname’ => Smith, ‘Age’ => 20 ); echo «имя пользователя » . $student[‘Name’] . «
«; echo «фамилия пользователя » . $student[‘Surname’] . «
«; echo «возраст пользователя » . $student[‘Age’] . «
«;
$student[‘Name’] = ‘John’; $student[‘Surname’] = ‘Smith’; $student[‘Age’] = 20; echo «имя пользователя » . $student[‘Name’] . «
«; echo «фамилия пользователя » . $student[‘Surname’] . «
«; echo «возраст пользователя » . $student[‘Age’] . «
«;
Индексированные массивы без ключа:
Также следует учесть, что индексы в массиве вообще можно не писать при инициализации массива значениями. Тогда мы создаем так называемый массив-коллекцию (объект-коллекцию):
$student = array(‘John’,’Smith’, 20);
В таком случае интерпретатор сам присвоит им числовые индексы, начиная с 0
«a», «1»=> «b», 2 => «c», 2 => «d», ); var_dump($my_array); ?>
«1», 2 => 2, «multi» => array( «1_1» => «1_1» ) ); var_dump($array_odnom [«first»]); var_dump($array_odnom [2]); var_dump($array_odnom [«multi»][«1_1»]); ?>
Выполнение:
$array_odnom = array( 1 => array( 1 => «1_1», 2 => «1_2», 3 => «1_3»), 2 => array( 1 => «2_1», 2 => «2_2», 3 => «2_3»), ); echo $array_odnom[1][1];
Используйте шаблон объявления и ориентируйтесь по цветам:
Красным – массивы.
Коричневым – числовая переменная.
Синим – константа.
Уважаемый (ая), Иван Иванович !
Приглашаем Вас на день открытых дверей .
Дата события: 12 мая.
С уважением, Василий.
Дополните код:
// объявление константы define(«SIGN»,»С уважением, Вася»); // массив для имен адресатов $names = array(. ); // массив для событий $events = array( «op_doors» => «день открытых дверей», «vistavka» => «выставку», . ); $str = «Уважаемый(ая), $names[0]!
«; $str .= . ; $str .= . ; echo . ;
Для того чтобы стать настоящим гуру в области программирования работы с API ВКОНТАКТЕ предлагаем пройти добротный и очень подробный видеокурс по PHP: работа с вконтакте. Замечательная, очень понятная форма подачи материала, пошаговость и доступные примеры гарантируют успешное усвоение и получение необходимых навыков. Подробно о курсе можно ознакомиться Для приобретения курса пройдите по . —>
Источник
Массивы
На самом деле массив в PHP — это упорядоченное отображение, которое устанавливает соответствие между значением и ключом. Этот тип оптимизирован в нескольких направлениях, поэтому вы можете использовать его как собственно массив, список (вектор), хэш-таблицу (являющуюся реализацией карты), словарь, коллекцию, стек, очередь и, возможно, что-то еще. Так как значением массива может быть другой массив PHP, можно также создавать деревья и многомерные массивы.
Объяснение этих структур данных выходит за рамки данного справочного руководства, но вы найдете как минимум один пример по каждой из них. За дополнительной информацией вы можете обратиться к соответствующей литературе по этой обширной теме.
Синтаксис
Определение при помощи array()
Массив (тип array ) может быть создан языковой конструкцией array() . language construct. В качестве параметров она принимает любое количество разделенных запятыми пар key => value (ключ => значение).
Запятая после последнего элемента массива необязательна и может быть опущена. Обычно это делается для однострочных массивов, т.е. array(1, 2) предпочтительней array(1, 2, ). Для многострочных массивов с другой стороны обычно используется завершающая запятая, так как позволяет легче добавлять новые элементы в конец массива.
Начиная с PHP 5.4 возможно использовать короткий синтаксис определения массивов, который заменяет языковую конструкцию array() на [].
Пример #1 Простой массив
// Начиная с PHP 5.4
$array = [
«foo» => «bar» ,
«bar» => «foo» ,
];
?>
key может быть либо типа integer , либо типа string . value может быть любого типа.
Дополнительно с ключом key будут сделаны следующие преобразования:
- Строки, содержащие целое число будут преобразованы к типу integer . Например, ключ со значением «8» будет в действительности сохранен со значением 8. С другой стороны, значение «08» не будет преобразовано, так как оно не является корректным десятичным целым.
- Числа с плавающей точкой (тип float ) также будут преобразованы к типу integer , т.е. дробная часть будет отброшена. Например, ключ со значением 8.7 будет в действительности сохранен со значением 8.
- Тип bool также преобразовываются к типу integer . Например, ключ со значением true будет сохранен со значением 1 и ключ со значением false будет сохранен со значением 0.
- Тип null будет преобразован к пустой строке. Например, ключ со значением null будет в действительности сохранен со значением «».
- Массивы (тип array ) и объекты (тип object ) не могут использоваться в качестве ключей. При подобном использовании будет генерироваться предупреждение: Недопустимый тип смещения (Illegal offset type).
Если несколько элементов в объявлении массива используют одинаковый ключ, то только последний будет использоваться, а все другие будут перезаписаны.
Пример #2 Пример преобразования типов и перезаписи элементов
Результат выполнения данного примера:
Так как все ключи в вышеприведенном примере преобразуются к 1, значение будет перезаписано на каждый новый элемент и останется только последнее присвоенное значение «d».
Массивы в PHP могут содержать ключи типов integer и string одновременно, так как PHP не делает различия между индексированными и ассоциативными массивами.
Пример #3 Смешанные ключи типов integer и string
Результат выполнения данного примера:
Параметр key является необязательным. Если он не указан, PHP будет использовать предыдущее наибольшее значение ключа типа integer , увеличенное на 1.
Пример #4 Индексированные массивы без ключа
Результат выполнения данного примера:
Возможно указать ключ только для некоторых элементов и пропустить для других:
Пример #5 Ключи для некоторых элементов
Результат выполнения данного примера:
Как вы видите последнее значение «d» было присвоено ключу 7. Это произошло потому, что самое большое значение ключа целого типа перед этим было 6.
Доступ к элементам массива с помощью квадратных скобок
Доступ к элементам массива может быть осуществлен с помощью синтаксиса arrayPhp способы объявления массива.
Пример #6 Доступ к элементам массива
= array(
«foo» => «bar» ,
42 => 24 ,
«multi» => array(
«dimensional» => array(
«array» => «foo»
)
)
);
var_dump ( $array [ «foo» ]);
var_dump ( $array [ 42 ]);
var_dump ( $array [ «multi» ][ «dimensional» ][ «array» ]);
?>
Результат выполнения данного примера:
Для доступа к элементам массива могут использоваться как квадратные, так и фигурные скобки (например, $array[42] и $array означают одно и то же в вышеприведенном примере).
С PHP 5.4 стало возможным прямое разыменование массива, возвращаемого в качестве результата вызова функции или метода. Раньше приходилось использовать временные переменные.
С PHP 5.5 стало возможным прямое разыменование элементов у литерала массива.
Пример #7 Разыменование массива
function getArray () <
return array( 1 , 2 , 3 );
>
// в PHP 5.4
$secondElement = getArray ()[ 1 ];
// ранее делали так
$tmp = getArray ();
$secondElement = $tmp [ 1 ];
// или так
list(, $secondElement ) = getArray ();
?>
Попытка доступа к неопределенному ключу в массиве — это то же самое, что и попытка доступа к любой другой неопределенной переменной: будет сгенерирована ошибка уровня E_NOTICE , и результат будет NULL .
Создание/модификация с помощью синтаксиса квадратных скобок
Существующий массив может быть изменен явной установкой значений в нем.
Это выполняется присвоением значений массиву array с указанием в скобках ключа. Кроме того, вы можете опустить ключ. В этом случае добавьте к имени переменной пустую пару скобок ([]).
Если массив $arr еще не существует, он будет создан. Таким образом, это еще один способ определить массив array . Однако такой способ применять не рекомендуется, так как если переменная $arr уже содержит некоторое значение (например, значение типа string из переменной запроса), то это значение останется на месте и [] может на самом деле означать доступ к символу в строке. Лучше инициализировать переменную путем явного присваивания значения.
Для изменения определенного значения просто присвойте новое значение элементу, используя его ключ. Если вы хотите удалить пару ключ/значение, вам необходимо использовать функцию unset() .
= array( 5 => 1 , 12 => 2 );
$arr [] = 56 ; // В этом месте скрипта это
// то же самое, что и $arr[13] = 56;
$arr [ «x» ] = 42 ; // Это добавляет к массиву новый
// элемент с ключом «x»
unset( $arr [ 5 ]); // Это удаляет элемент из массива
unset( $arr ); // Это удаляет массив полностью
?>
Как уже говорилось выше, если ключ не был указан, то будет взят максимальный из существующих целочисленных ( integer ) индексов, и новым ключом будет это максимальное значение (в крайнем случае 0) плюс 1. Если целочисленных индексов еще нет, то ключом будет 0 (ноль).
Учтите, что максимальное целое значение ключа не обязательно существует в массиве в данный момент. Оно могло просто существовать в массиве какое-то время, с тех пор как он был переиндексирован в последний раз. Следующий пример это иллюстрирует:
// Создаем простой массив.
$array = array( 1 , 2 , 3 , 4 , 5 );
print_r ( $array );
// Теперь удаляем каждый элемент, но сам массив оставляем нетронутым:
foreach ( $array as $i => $value ) <
unset( $array [ $i ]);
>
print_r ( $array );
// Добавляем элемент (обратите внимание, что новым ключом будет 5, вместо 0).
$array [] = 6 ;
print_r ( $array );
// Переиндексация:
$array = array_values ( $array );
$array [] = 7 ;
print_r ( $array );
?>
Результат выполнения данного примера:
Полезные функции
Для работы с массивами существует достаточное количество полезных функций. Смотрите раздел функции для работы с массивами.
Функция unset() позволяет удалять ключи массива. Обратите внимание, что массив НЕ будет переиндексирован. Если вы действительно хотите поведения в стиле «удалить и сдвинуть», можно переиндексировать массив используя array_values() .
= array( 1 => ‘один’ , 2 => ‘два’ , 3 => ‘три’ );
unset( $a [ 2 ]);
/* даст массив, представленный так:
$a = array(1 => ‘один’, 3 => ‘три’);
а НЕ так:
$a = array(1 => ‘один’, 2 => ‘три’);
*/
$b = array_values ( $a );
// Теперь $b это array(0 => ‘один’, 1 => ‘три’)
?>
Управляющая конструкция foreach существует специально для массивов. Она предоставляет возможность легко пройтись по массиву.
Что можно и нельзя делать с массивами
Почему $foo[bar] неверно?
Всегда заключайте в кавычки строковый литерал в индексе ассоциативного массива. К примеру, пишите $foo[‘bar’], а не $foo[bar]. Но почему? Часто в старых скриптах можно встретить следующий синтаксис:
This is wrong, but it works. The reason is that this code has an undefined constant (bar) rather than a string (‘bar’ — notice the quotes). PHP may in the future define constants which, unfortunately for such code, have the same name. It works because PHP automatically converts a bare string (an unquoted string which does not correspond to any known symbol) into a string which contains the bare string . For instance, if there is no defined constant named bar , then PHP will substitute in the string ‘bar’ and use that.
Замечание: Это не означает, что нужно всегда заключать ключ в кавычки. Нет необходимости заключать в кавычки константы или переменные, поскольку это помешает PHP обрабатывать их.
Результат выполнения данного примера:
Дополнительные примеры, демонстрирующие этот факт:
// Показываем все ошибки
error_reporting ( E_ALL );
$arr = array( ‘fruit’ => ‘apple’ , ‘veggie’ => ‘carrot’ );
// Верно
print $arr [ ‘fruit’ ]; // apple
print $arr [ ‘veggie’ ]; // carrot
// Неверно. Это работает, но из-за неопределенной константы с
// именем fruit также вызывает ошибку PHP уровня E_NOTICE
//
// Notice: Use of undefined constant fruit — assumed ‘fruit’ in.
print $arr [ fruit ]; // apple
// Давайте определим константу, чтобы продемонстрировать, что
// происходит. Мы присвоим константе с именем fruit значение ‘veggie’.
define ( ‘fruit’ , ‘veggie’ );
// Теперь обратите внимание на разницу
print $arr [ ‘fruit’ ]; // apple
print $arr [ fruit ]; // carrot
// Внутри строки это нормально. Внутри строк константы не
// рассматриваются, так что ошибки E_NOTICE здесь не произойдет
print «Hello $arr [ fruit ] » ; // Hello apple
// С одним исключением: фигурные скобки вокруг массивов внутри
// строк позволяют константам там находиться
print «Hello < $arr [ fruit ]>» ; // Hello carrot
print «Hello < $arr [ 'fruit' ]>» ; // Hello apple
// Это не будет работать и вызовет ошибку обработки, такую как:
// Parse error: parse error, expecting T_STRING’ or T_VARIABLE’ or T_NUM_STRING’
// Это, конечно, также действует и с суперглобальными переменными в строках
print «Hello $arr [ ‘fruit’]» ;
print «Hello $_GET [ ‘foo’]» ;
// Еще одна возможность — конкатенация
print «Hello » . $arr [ ‘fruit’ ]; // Hello apple
?>
Если вы переведете error_reporting в режим отображения ошибок уровня E_NOTICE (например, такой как E_ALL ), вы сразу увидите эти ошибки. По умолчанию error_reporting установлена их не отображать.
Как указано в разделе синтаксис, внутри квадратных скобок (‘[‘ и ‘]‘) должно быть выражение. Это означает, что можно писать вот так:
Это пример использования возвращаемого функцией значения в качестве индекса массива. PHP известны также и константы:
Обратите внимание, что E_ERROR — это такой же верный идентификатор, как и bar в первом примере. Но последний пример по сути эквивалентен такой записи:
поскольку E_ERROR соответствует 1, и т.д.
Так что же в этом плохого?
Когда-нибудь в будущем, команда разработчиков PHP, возможно, пожелает добавить еще одну константу или ключевое слово, либо константа из другого кода может вмешаться и тогда у вас могут возникнуть проблемы. Например, вы уже не можете использовать таким образом слова empty и default, поскольку они являются зарезервированными ключевыми словами.
Замечание: Повторим, внутри строки ( string ), заключенной в двойные кавычки, корректно не окружать индексы массива кавычками, поэтому «$foo[bar]» является верной записью. Более подробно почему — смотрите вышеприведенные примеры, а также раздел обработка переменных в строках.
Преобразование в массив
Для любого из типов: integer , float , string , boolean и resource , преобразование значения в массив дает результатом массив с одним элементом (с индексом 0), являющимся скалярным значением, с которого вы начали. Другими словами, (array)$scalarValue — это точно то же самое, что и array($scalarValue).
Если вы преобразуете в массив объект ( object ), вы получите в качестве элементов массива свойства (переменные-члены) этого объекта. Ключами будут имена переменных-членов, с некоторыми примечательными исключениями: целочисленные свойства станут недоступны; к закрытым полям класса (private) спереди будет дописано имя класса; к защищенным полям класса (protected) спереди будет добавлен символ ‘*’. Эти добавленные значения с обоих сторон также имеют нулевые байты. Это может вызвать несколько неожиданное поведение:
class A <
private $A ; // Это станет ‘\0A\0A’
>
class B extends A <
private $A ; // Это станет ‘\0B\0A’
public $AA ; // Это станет ‘AA’
>
var_dump ((array) new B ());
?>
Вышеприведенный код покажет 2 ключа с именем ‘AA’, хотя один из них на самом деле имеет имя ‘\0A\0A’.
Если вы преобразуете в массив значение NULL , вы получите пустой массив.
Сравнение
Массивы можно сравнивать при помощи функции array_diff() и операторов массивов.
Примеры
The array type in PHP is very versatile. Here are some examples: Тип массив в PHP является очень гибким, вот несколько примеров:
// это
$a = array( ‘color’ => ‘red’ ,
‘taste’ => ‘sweet’ ,
‘shape’ => ’round’ ,
‘name’ => ‘apple’ ,
4 // ключом будет 0
);
$b = array( ‘a’ , ‘b’ , ‘c’ );
// . . .полностью соответствует
$a = array();
$a [ ‘color’ ] = ‘red’ ;
$a [ ‘taste’ ] = ‘sweet’ ;
$a [ ‘shape’ ] = ’round’ ;
$a [ ‘name’ ] = ‘apple’ ;
$a [] = 4 ; // ключом будет 0
// после выполнения этого кода, $a будет массивом
// array(‘color’ => ‘red’, ‘taste’ => ‘sweet’, ‘shape’ => ’round’,
// ‘name’ => ‘apple’, 0 => 4), а $b будет
// array(0 => ‘a’, 1 => ‘b’, 2 => ‘c’), или просто array(‘a’, ‘b’, ‘c’).
?>
Пример #8 Использование array()
// Массив как карта (свойств)
$map = array( ‘version’ => 4 ,
‘OS’ => ‘Linux’ ,
‘lang’ => ‘english’ ,
‘short_tags’ => true
);
// исключительно числовые ключи
$array = array( 7 ,
8 ,
0 ,
156 ,
— 10
);
// это то же самое, что и array(0 => 7, 1 => 8, . )
$switching = array( 10 , // ключ = 0
5 => 6 ,
3 => 7 ,
‘a’ => 4 ,
11 , // ключ = 6 (максимальным числовым индексом было 5)
‘8’ => 2 , // ключ = 8 (число!)
’02’ => 77 , // ключ = ’02’
0 => 12 // значение 10 будет перезаписано на 12
);
// пустой массив
$empty = array();
?>
Пример #9 Коллекция
= array( ‘red’ , ‘blue’ , ‘green’ , ‘yellow’ );
foreach ( $colors as $color ) <
echo «Вам нравится $color ?\n» ;
>
Результат выполнения данного примера:
Изменение значений массива напрямую стало возможным с версии PHP 5 путем передачи их по ссылке. До этого необходим следующий обходной прием:
Пример #10 Изменение элемента в цикле
// PHP 5
foreach ( $colors as & $color ) <
$color = strtoupper ( $color );
>
unset( $color ); /* это нужно для того, чтобы последующие записи в
$color не меняли последний элемент массива */
// Обходной прием для старых версий
foreach ( $colors as $key => $color ) <
$colors [ $key ] = strtoupper ( $color );
>
Результат выполнения данного примера:
Следующий пример создает массив, начинающийся с единицы.
Пример #11 Индекс, начинающийся с единицы
Результат выполнения данного примера:
Пример #12 Заполнение массива
Массивы упорядочены. Вы можете изменять порядок элементов, используя различные функции сортировки. Для дополнительной информации смотрите раздел функции для работы с массивами. Вы можете подсчитать количество элементов в массиве с помощью функции count() .
Пример #13 Сортировка массива
Поскольку значение массива может быть чем угодно, им также может быть другой массив. Таким образом вы можете создавать рекурсивные и многомерные массивы.
Пример #14 Рекурсивные и многомерные массивы
= array ( «фрукты» => array ( «a» => «апельсин» ,
«b» => «банан» ,
«c» => «яблоко»
),
«числа» => array ( 1 ,
2 ,
3 ,
4 ,
5 ,
6
),
«дырки» => array ( «первая» ,
5 => «вторая» ,
«третья»
)
);
// Несколько примеров доступа к значениям предыдущего массива
echo $fruits [ «дырки» ][ 5 ]; // напечатает «вторая»
echo $fruits [ «фрукты» ][ «a» ]; // напечатает «апельсин»
unset( $fruits [ «дырки» ][ 0 ]); // удалит «первая»
// Создаст новый многомерный массив
$juices [ «apple» ][ «green» ] = «good» ;
?>
Обратите внимание, что при присваивании массива всегда происходит копирование значения. Чтобы скопировать массив по ссылке, вам нужно использовать оператор ссылки.
= array( 2 , 3 );
$arr2 = $arr1 ;
$arr2 [] = 4 ; // $arr2 изменился,
// $arr1 все еще array(2, 3)
$arr3 = & $arr1 ;
$arr3 [] = 4 ; // теперь $arr1 и $arr3 одинаковы
?>
Источник