Доступ по ключу
Ассоциативные массивы — объекты, которые наиболее приспособлены для выборки из них данных путем указания нужного ключа. В РНР и для всех массивов, и для списков (которые, также являются массивами) используется один и тот же синтаксис, что является очень большим достоинством. Вот как это выглядит:
echo $Arr["anykey"]; // выводит элемент массива $Аrr с ключом anykey
echo $Arr["first"]["second"]; // так используются двумерные массивы
$Аrr = SomeFuncThatReturnsArray();
echo $Arr[5];
Величина $Аrr[ключ] может стоять в левой части оператора присваивания, oт нее можно брать ссылку с помощью оператора &, и т. д. Н-р:
$Аrr ["аnуkеу"]=аггау(100,200); // присваиваем элементу массива 100
$ref = &$Arr ["first"] ["second"]; // $ref — синоним элемента массива
$Arr [] = "for add"; // добавляем новый элемент
Функция count ( )
Можно определить размер (число элементов) и массиве при помощи стандартной функции count ():
$num = count ($Names) ; // теперь в $num — число элементов в массиве
Count () работает не только с массивами, но и с обьектами и даже с обычными переменными (для последних соunt() всегда равен 1, как будто переменная — это массив с одним элементом).
Слияние массивов
Операция слияния массивов – создание массива, содержащего как элементы одного, так и другого массива. Реализу¬ется это при помощи оператора +. Н-р:
$a = аrrау ("а"=>"аа", "b"=>"bb");
$b = array ("c"=>"cc", "d"=>"dd");
$c = $a+$b;
В результате в $с окажется ассоциативный массив, содержащий все 4 элемента, а именно: array (”a”=>”aa”, “b”=>”bb”, “c”=>”cc”, “d”=>”dd”), причем именно в указанном порядке. Если бы мы написали $с=$b+$а, ре-дьтат бы был немного другой, а именно: array(”c”=>”cc”, “d”=>”dd”, ”a”=>”аа”, “b”=>”bb”), т.е. элементы расположены в другом порядке.
Слияние списков будет выглядеть так:
$a = array (10,20,30);
$b = array (100,200);
$c = $a + $b;
В $с будет array(10,20,30). При конкатенации массивов с некоторыми одинаковыми элементами (т.е., элементами с одинаковыми ключами) в результирующем массиве останется только один элемент с таким же ключом — тот, который был в первом мас¬сиве, и на том же самом месте.
П-р:
$а = аrrау ('а'=>10, 'b'=>20);
$b = array ('bl=>'new?') ;
$а += $b;
В результате этих операций значение $а не изменится!
Обновление элементов в массиве $а:
foreach ($b as $k=>$v) $a[$k]=$v;
Операции слияния массивов. Н-р, дана цепочка:
$z=$a+$b+$c+ . . . и т. д.;
эквивалентна
$z=$a; $z+=$b; $z+=$c; . . . и т. д.
Оператор += для массивов делает примерно то же, что и оператор += для чисел, а именно — добавляет в свой левый операнд элементы, перечисленные в правом операнде-массиве, если они еще не содержатся в массиве слева.
В массиве никогда не может быть двух элементов с одинаковыми ключами, потому что все операции, применимые к массивам, всегда контролируют, чтобы этого не произошло.
Прямой перебор массива
Идея метода заключается в том, чтобы сразу на каждом “витке” цикла одновременно получать и ключ, и значение текущего элемента.
Перебор в стиле РНР4
В четвертой версии языка добавлена специальная инструкция пере¬бора массива — foreach. С ее по¬мощью можно перебрать и распечатать наш массив людей:
foreach ($Names as $k=>$v) echo "Возраст $k - $v\n";
Классический перебор
Массив $Names хранит связь имен людей и их возрастов. Вот как можно перебрать этот массив при помощи прямого перебора:
for (Reset($Names);list($k,$v)=each($Names);/*пусто*/)
echo "Возраст $k—$v\n";
Переменным $k и $v присваивается результат работы функции each (). Третье условие цикла отсутствует.
Функция each () возвращает небольшой массив (список), нулевой элемент которого хранит величину ключа текущего элемента массива $Names, а первый — значение текущего элемента; продвигает указатель текущего элемента к следующей позиции. Если следующего элемента в массиве нет, то функция возвращает не список, a false, поэтому она и размещена в условии цикла for.
Похожие записи
No user прокомментировали сообщение
Оставить комментарий