【问题标题】:Retrieve first key in multi-dimensional array using PHP使用PHP检索多维数组中的第一个键
【发布时间】:2009-08-25 17:07:51
【问题描述】:

我想从这个多维数组中检索第一个键。

Array
(
    [User] => Array
        (
            [id] => 2
            [firstname] => first
            [lastname] => last
            [phone] => 123-1456
            [email] => 
            [website] => 
            [group_id] => 1
            [company_id] => 1
        )

)

这个数组存储在$this->data中。

现在我正在使用 key($this->data) 来检索“用户”,但这并不是获得结果的正确方法。

还有其他方法可以检索此结果吗?

谢谢

【问题讨论】:

  • array_shift() 也可以。

标签: php arrays multidimensional-array


【解决方案1】:

还有其他方法可以做到这一点,但没有什么比使用key() 更快更短。其他所有用法都是获取 all 键。例如,所有这些都将返回数组中的第一个键:

$keys=array_keys($this->data);
echo $keys[0]; //prints first key

foreach ($this->data as $key => $value)
{
    echo $key;
    break;
}

如你所见,两者都很草率。

如果你想要一个单行,但如果迭代器不在第一个元素上,但又想保护自己不会意外得到错误的键,试试这个:

reset($this->data);

reset():

reset() 倒回数组的内部 指向第一个元素的指针和 返回第一个数组的值 元素。

但你所做的对我来说看起来不错。有一个功能可以在一行中完全满足您的要求;你还想要什么?

【讨论】:

  • 嗯,我想我会改用那个方法。根据PHP手册key()定义为“”key()返回当前数组位置的索引元素。 "" 因此,如果由于某种原因我们不在第一个数组位置,它将返回不正确的键。
  • 谢谢,我会坚持使用 key()。
  • 抱歉,我刚刚看到您的最后一次编辑(我认为编辑需要一分钟左右才能发布)...reset() 正是我想要的。我不知道为什么数组不会在第一个位置,但我宁愿安全而不是抱歉!
【解决方案2】:

使用这个(PHP 5.5+):

echo reset(array_column($this->data, 'id'));

【讨论】:

  • 你能用你的代码解释一下吗?它可能对 OP 或未来的用户有更多帮助。
【解决方案3】:

我有一个类似的问题要解决,很高兴找到这篇文章。但是,提供的解决方案仅适用于 2 个级别,不适用于具有任意级别的多维数组。我需要一个可以适用于任何维度的数组并且可以找到每个级别的第一个键的解决方案。

经过一番努力,我找到了一个可能对其他人有用的解决方案,因此我将我的解决方案作为本文的一部分。

这是一个示例起始数组:

    $myArray = array(
    'referrer' => array(
        'week' => array(
            '201901' => array(
                'Internal' => array(
                    'page' => array(
                        'number' => 201,
                        'visits' => 5
                    )
                ),
                'External' => array(
                    'page' => array(
                        'number' => 121,
                        'visits' => 1
                    )
                ),
            ),
            '201902' => array(
                'Social' => array(
                    'page' => array(
                        'number' => 921,
                        'visits' => 100
                    )
                ),
                'External' => array(
                    'page' => array(
                        'number' => 88,
                        'visits' => 4
                    )
                ),
            )
        )
    )
);

由于这个函数需要显示所有的第一个键,无论数组的维度是多少,这建议使用递归函数,我的函数如下所示:

function getFirstKeys($arr){
    $keys = '';
    reset($arr);
    $key = key($arr);
    $arr1 = $arr[$key];
    if (is_array($arr1)){
        $keys .= $key . '|'. getFirstKeys($arr1);
    } else {
        $keys = $key;
    }
    return $keys;
}

使用代码调用函数时:

$xx = getFirstKeys($myArray);
echo '<h4>Get First Keys</h4>';
echo '<li>The keys are: '.$xx.'</li>';

输出是:

获取第一把钥匙

  • 键是:referrer|week|201901|Internal|page|number

我希望这可以为遇到类似问题的人节省一点时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多