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

时间:2009-08-25 17:07:52

标签: php arrays multidimensional-array

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

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

)

此数组存储在$ this-> data。

现在我正在使用密钥($ this->数据)来检索“用户”,但这不是达到结果的正确方法。

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

由于

3 个答案:

答案 0 :(得分:8)

还有其他方法可以做到这一点,但没有像使用key()一样快捷。其他所有用途都是用于获取所有键。例如,所有这些都将返回数组中的第一个键:

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

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

你可以看到两者都很草率。

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

reset($this->data);

reset():

  

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

但是你做的事对我来说很好看。有一个功能可以在一行中完成您想要的功能;你还想要什么?

答案 1 :(得分:0)

使用此(PHP 5.5 +):

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

答案 2 :(得分: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>';

输出为:

获取第一把钥匙

  • 关键在于:引荐来源|周| 201901 |内部|页面|编号

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