使用PHP检索多维数组中的第一个键

6
我想从这个多维数组中检索第一个键。
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) 来检索正确的值 'User',但这不像是达到结果的正确方式。

还有其他方法可以检索到这个结果吗?

谢谢。


array_shift() 也可以。 - Wayne
3个回答

9

还有其他方法可以做到,但没有任何一种方法像使用key()那样快速和简短。每个其他用法都是为了获取所有键。例如,下面的所有内容都将返回数组中的第一个键:

$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()返回当前数组位置的索引元素。”因此,如果由于某种原因我们不在第一个数组位置,它将返回错误的键。 - user103219
谢谢,我会坚持使用key()。 - user103219
1
抱歉,我刚看到你的最后一次编辑(我认为编辑需要一分钟左右才能发布)...reset()正是我正在寻找的。我不知道为什么数组不会在第一个位置,但我宁愿保险一些也不想冒险! - user103219

0
使用以下代码(PHP 5.5+):
echo reset(array_column($this->data, 'id'));

你能否用代码提供一下解释?这可能会更有助于楼主或未来的用户。 - Bono

0

我曾经遇到同样的问题,很高兴找到了这篇文章。但是,提供的解决方案仅适用于 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

希望这能为遇到类似问题的人节省一些时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接