Существует ли встроенная функция php (5+), которая выполняет следующие действия в 1 строке? - PullRequest
1 голос
/ 05 ноября 2008
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();
}

Ответы [ 5 ]

1 голос
/ 05 ноября 2008

Вы можете вернуть 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;

?>
1 голос
/ 05 ноября 2008

Я не пробовал, но:

$myValue = @$myArray[$myKey];

может сработать, хотя я честно думаю, что вам будет лучше использовать

$myValue = (array_key_exists($myKey, $myArray)) ? $myArray[$myKey] : null;
0 голосов
/ 19 мая 2010

$ myValue = ($ tmp = myClass :: giveMeArray () && $ tmp [$ myKey])? $ tmp [$ myKey]: null;

Это не красиво, но все будет в одной строке. ; -)

0 голосов
/ 05 ноября 2008

Почему бы вам не изменить функцию 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
0 голосов
/ 05 ноября 2008

РЕДАКТИРОВАТЬ : оказывается, мне нужно освежить в PHP5. Мой ответ ниже неверен и относится только к PHP4, так как PHP5 имеет цепочку методов .


PHP не позволяет объединять операторы возврата из функций, как во многих других языках. например, в 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();

Короче говоря, если вы хотите использовать результат функции, сначала вы должны временно сохранить его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...