доступ к значениям массива без квадратных скобок в PHP
в php как я могу получить доступ к значениям массива без использования квадратных скобок вокруг ключа? Моя конкретная проблема заключается в том, что я хочу получить доступ к элементам массива, возвращаемого функцией. Функция Say (args) возвращает массив. Зачем быть $var = функция (args)[0]; кричишь на меня из-за квадратных скобок? Могу я сделать что-то вроде $var = функция (args).значение(0); или я упускаю что-то очень важное?
5 ответов
как говорили другие, вам в значительной степени нужно использовать временную переменную:
$temp = myFunction();
$value = $temp[0];
но, если знать структуру возвращаемого массива, можно избежать временной переменной.
если вы просто хотите первый член:
$value = reset(myFunction());
если вы хотите последний член:
$value = end(myFunction());
если вы хотите, чтобы кто-то между:
// second member
list(, $value) = myFunction();
// third
list(, , $value) = myFunction();
// or if you want more than one:
list(, , $thirdVar, , $fifth) = myFunction();
в PHP, при получении массива в результате функции, вам, к сожалению, придется сделать дополнительный шаг:
$temp_array = function($args);
$var = $temp_array[0];
для объектов это было расслаблено в PHP 5. Вы можете сделать:
$echo function($args)->property;
(при function
возвращает объект, конечно.)
function getKey($array, $key){
return $array[$key];
}
$var = getKey(myFunc(args), $key);
нет никакого способа сделать это без добавления пользовательской функции, к сожалению. Это просто не часть синтаксиса.
вы всегда можете просто сделать это по-старому моды
$array = myFunc();
$value = $array[0];
что точно соответствует вашему ожидаем:
echo pos(array_slice($a=myFunc(), pos(array_keys(array_keys($a), 'NameOfKey'));
ответил Кинетикс Кин, Тайбэй
Если вы хотите этого, вероятно, лучше всего возвращать объект (к сожалению, его полностью хромой php не поддерживает это). Вот сумасшедший способ, который я смог выяснить, хотя, из новизны (пожалуйста, не делайте этого!):
function returnsArray(){
return array("foo" => "bar");
}
echo json_decode(json_encode((object)returnsArray()))->foo;
//prints 'bar'
да..пока они не добавят поддержку разыменования массивов в php, я думаю, вы, вероятно, должны просто привести возвращаемый массив в качестве объекта:
return (object)array("foo" => "bar");
и затем вы можете сделать returnsArray () - >foo, так как php расслабляет разыменование объектов, но не массивы.. или, конечно, напишите функцию-оболочку, как предлагали другие.