【问题标题】:Access PHP array element with a function?使用函数访问 PHP 数组元素?
【发布时间】:2010-09-28 15:10:55
【问题描述】:

我正在开发一个程序,该程序使用 PHP 的内部数组指针沿多维数组进行迭代。我需要从当前行中获取一个元素,我一直在这样做:

$arr[key($arr)]['item']

但是,我更喜欢使用类似的东西:

current($arr)['item'] // invalid syntax

我希望有一个我在扫描文档时遗漏的功能可以让我像这样访问元素:

getvalue(current($arr), 'item')

current($arr)->getvalue('item')

有什么建议吗?

【问题讨论】:

  • 你已经找到了最好的解决方案:$arr[key($arr)]['item']
  • getvalue 方法即使对一维数组也很有用。它将允许解决 ≤5.3 的语法限制,并允许直接在一个语句中访问数组中的元素,比如由函数调用返回的元素。我缺少这样的内部功能。

标签: php arrays


【解决方案1】:

我很怀疑有没有这样的功能,但是写起来很简单

function getvalue($array, $key)
{
  return $array[$key];
}

编辑:从 PHP 5.4 开始,您可以直接从函数表达式 current($arr)['item'] 索引数组元素。

【讨论】:

  • 我想这可能是我最终会做的事情。如果你是正确的,没有这样的功能,那是一个非常糟糕的疏忽。
【解决方案2】:

您是否尝试过使用iterator classes 之一?那里可能有一些东西可以完全满足您的要求。如果没有,您可以通过扩展 ArrayObject 类来获得您想要的。

【讨论】:

  • 刚刚看过那些——看起来这只是一种面向对象的遍历数组的方式。 ArrayIterator::current 返回当前项目,与 current() 函数非常相似,这并不是我遇到的问题。
【解决方案3】:

如果这不起作用,您的多维数组是如何组成的? var_dump() 可能会有所帮助。

$subkey = 'B';
$arr = array(
    $subkey => array(
        'AB' => 'A1',
        'AC' => 'A2'
    )
);


echo current($arr[$subkey]);
next($arr[$subkey]);
echo current($arr[$subkey]);

【讨论】:

  • 我正在执行的迭代实际上只沿着主数组。我说“多维”是因为主数组的对应元素本身就是数组,但我不想遍历它们——我只想方便地访问它们。
  • 如何将 $arr[$subkey] 视为一个数组,或者 $new_arr = array_values($arr[$subkey])?脚注:您请求的 current($arr)['item'] 和 current($arr['item']) 有什么不同?
【解决方案4】:

我经常用

foreach ($arr as $key=>$val) {
   $val['item'] /*$val is the value of the array*/
   $key         /*$key is the key used */
}

而不是

下一个($arr)/当前($arr)

【讨论】:

  • 我也使用它 - 为了这个问题,我消除了我实际上是在两个排序数组中寻找差异的事实,我很确定 foreach 不支持那种访问权限,但我可能是错的。无论如何,谢谢你的回复。 :)
【解决方案5】:

这个函数可能有点长,但我一直在使用它,特别是在以下场景中:

if (array_key_exists('user', $_SESSION) === true)
{
    if (array_key_exists('level', $_SESSION['user']) === true)
    {
        $value = $_SESSION['user']['level'];
    }

    else
    {
        $value = 'DEFAULT VALUE IF NOT EXISTS';
    }
}

else
{
    $value = 'DEFAULT VALUE IF NOT EXISTS';
}

转为:

Value($_SESSION, array('user', 'level'), 'DEFAULT VALUE IF NOT EXISTS');

函数如下:

function Value($array, $key = 0, $default = false)
{
    if (is_array($array) === true)
    {
        if (is_array($key) === true)
        {
            foreach ($key as $value)
            {
                if (array_key_exists($value, $array) === true)
                {
                    $array = $array[$value];
                }

                else
                {
                    return $default;
                }
            }

            return $array;
        }

        else if (array_key_exists($key, $array) === true)
        {
            return $array[$key];
        }
    }

    return $default;
}

PS:你也可以使用一维数组,像这样:

Value($_SERVER, 'REQUEST_METHOD', 'DEFAULT VALUE IF NOT EXISTS');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2013-02-11
    相关资源
    最近更新 更多