是否存在在 1 行中执行以下操作的本机 php (5+) 函数


Does a native php (5+) function exist that does the following in 1 line?

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
编辑

:原来我需要复习一下我的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();
所以,简而言之,如果你想

使用一个函数的结果,你必须先暂时存储它。