function array_value_from_key($array,$key) { return !empty($array[$key]) ? $array[$key] : null; }
Причина, по которой я спрашиваю, состоит в том, что у меня есть функция класса, которая возвращает массив.
Вместо того, чтобы делать
$myArray = myClass::giveMeArray(); $myValue = $myArray[$myKey];
Я хотел бы сделать что-то вроде
$myValue = array_value_from_key(myClass::giveMeArray(),$myKey);
Когда объект возвращается, вы можете связать объект, например
$myValue = myClass::giveMeObject()->aValue;
Вуаля, хорошая и чистая .. неспособность найти то, что кажется простой и тривиальной функцией, сводит меня с ума …
PS .. еще один пример того, как я хотел бы использовать такую функцию
if(arrayKeyVal(aClass::giveMeArray(),$myKey)) { do_something(); }
Я не пробовал, но:
$myValue = @$myArray[$myKey];
может работать, хотя я честно думаю, что вам было бы лучше использовать
$myValue = (array_key_exists($myKey, $myArray)) ? $myArray[$myKey] : null;
Вы можете вернуть ArrayObject , например.
<? class MyClass { public static function getArray() { $arr = array('dave' => 1, 'bob' => 2, 'james' => 3); return new ArrayObject($arr, ArrayObject::ARRAY_AS_PROPS); } } $var = MyClass::getArray()->bob; ?>
$ myValue = ($ tmp = myClass :: giveMeArray () && $ tmp [$ myKey])? $ tmp [$ myKey]: null;
Это некрасиво, но все будет сделано в одной строке. 😉
Почему бы вам не изменить функцию giveMeArray () следующим образом:
function giveMeArray($key = false) { $array = $whatever; $toret = null; if ($key) { if (array_key_exists($key, $array)) { $toret = $array[$key]; } } else { $toret = $array() } return $toret; }
Тогда вы можете назвать это как
$arr = myClass::giveMeArray(); //To get the whole array $value = myClass::giveMeArray($myKey); //To get the specific element
EDIT : Оказывается, мне нужно освежить мой PHP5. Мой ответ ниже неверен и применим только к PHP4, поскольку PHP5 имеет цепочку методов .
PHP не позволяет вам объединять операторы return из таких функций, как на многих других языках. например, в Javascript:
document.getElementById('abc').style.color = "#fff";
Это немного боль, но так оно и есть. Эквивалент, который вы должны сделать в PHP, – это хранить временные переменные. Вот вышесказанное, как вам пришлось бы писать, если бы это был PHP: (очевидно, это не настоящие функции PHP)
$myElement = $document->getElementById('abc'); $myElement->style->color = "#fff";
Один из немногих положительных в этом заключается в том, что он облегчает отладку.
Обратите внимание, что это относится только к функциям: вы можете «цеплять» свойства объектов:
$myObject->myArray[5]->anotherProperty->anotherArray[3]->anotherObject->aFunction();
поэтому, короче говоря, если вы хотите использовать результат функции, вы должны сначала ее сохранить