5.5. Преобразование массивов
Массивы можно преобразовывать в другие типы данных. При преобразовании в целое число, вещественное или логическое, будет получено значение, равное 1. При преобразовании массива в строковой тип данных будет получено слово Array. Это имеет смысл, если массив ошибочно использовался как строка. Массив будет преобразован в строку, содержащую значение Array, если его использовать в контексте, когда требуется строковой тип данных, как, например, в операторе print. Массив нельзя использовать в контексте, в котором используются числа, как, например, в операторе сложения, так как это приводит к ошибке. В листинге 5.7 приведены примеры преобразования массивов в другие типы данных.
| Листинг 5.7. Преобразование массивов в другие типы данных_
$userInfo = array(
"Name"=>"Леон Аткинсон",
"Location"=>"Мартинес, Калифорния",
"Occupation"=>"Программист",
"PHP Version"=>5.0); //Если логическое, целое или вещественное, // то PHP преобразует массив в 1 $asBool = (boolean)$userInfo; print("Логическое: $asBool
n"); $asInt = (integer)$userInfo; print("Целое: $asInt
n"); $asDouble = (double)$userInfo; print("Вещественное: $asDouble
n"); // При преобразовании в строку PHP // возвращает строку "Array" $asString = (string)$userInfo; print(" Строка: $asString
n"); //При преобразовании массива в объект
//PHP делает попытку преобразовать все элементы в свойства. //Элементы с пробелами вместо индексов не теряются, // а становятся недоступными $asObject = (object)$userInfo; print("Объект: $asObject->Location
n"); print("$asObject->PHP Version
n"); //не действует! //если убрать комментарий у следующего оператора, //препроцессор обнаружит синтаксическую ошибку //print($userInfo + 1);
//PHP знает, как преобразовать массив в строку, хотя //и безрезультатно.
print("Преобразовать в строку:" . $userInfo . "
n"); //PHP не преобразует массив в объект print($userInfo->Name . "
n");
?>
Наиболее полезным преобразованием массива является преобразование массива в объект. Его элементы в таком случае становятся свойствами объекта. Однако элементы, индексированные по значениям, которые не могут быть свойствами, остаются недоступными. Эти значения не теряются, и если переменная будет преобразована в массив, она опять станет переменной. Объектам посвящается глава 6, "Классы и объекты".
5.6. Оператор +
Оператор + для массивов имеет специальное предназначение: он позволяет объединять элементы из массива, указанного в правой части, с элементами массива, указанного в левой части. Важное значение имеют индексы массивов. Если такой индекс существует в массиве, указанном слева, он остается неизменным. Добавляются только элементы массива, указанного справа, к индексам, отличным от индексов элементов, перечисленных слева (листинг 5.8).
| Листинг 5.8. Использование оператора +
// объявление массивов $a = array(
0=>"Apple",
2=>"Ball");
$b = array(
1=>"Cat",
2=>"Dog");
foreach(($a + $b) as $key=>$value)
{
print("$key: $value
n");
}
На рис. 5.1 показано, что выводит на печать программный код, представленный в листинге 5.8. Как видно, выводится массив с тремя элементами; элемент с индексом 2 использует значение из массива a, а не b.
В главе 11, "Данные", описывается функция array_merge, с помощью которой можно осуществить объединение другого типа.
5.7. Ссылка на массивы внутри строк
Как вы уже знаете из главы 2, "Переменные, операторы и выражения", посередине строки можно поместить переменную, используя двойные кавычки. После подстановки ее заменит значение переменной. Одномерный массив с целочисленными индексами будет корректно проинтерпретирован внутри двойных кавычек. Но использование в строках многомерных массивов довольно проблематично. Для того чтобы использовать многомерные массивы, воспользуйтесь фигурными скобками. Это приостановит обычный синтаксический анализ, который будет производиться в пределах строки, в двойных кавычках. Конечно, строки всегда поддаются конкатенации. В листинге 5.9 продемонстрированы различные методы использования массивов внутри строк.