доступ к значениям массива без квадратных скобок в 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 расслабляет разыменование объектов, но не массивы.. или, конечно, напишите функцию-оболочку, как предлагали другие.