Получить первый ключ в многомерном массиве с помощью PHP - PullRequest
6 голосов
/ 25 августа 2009

Я хотел бы получить первый ключ из этого многомерного массива.

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

)

Этот массив хранится в $ this-> data.

Сейчас я использую ключ($ this-> data), который извлекает «пользователя» как следует, но это не похоже на правильный способ достижения результата.

Есть ли другие способы получения этого результата?

Спасибо

Ответы [ 3 ]

8 голосов
/ 25 августа 2009

Есть и другие способы сделать это, но нет ничего более быстрого и короткого, чем использование 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 () перематывает внутренний массив указатель на первый элемент и возвращает значение первого массива элемент.

Но то, что вы делаете, выглядит хорошо для меня. Есть функция, которая делает именно то, что вы хотите в одной строке; что еще можно хотеть?

0 голосов
/ 25 января 2019

У меня была похожая проблема, и я был рад найти этот пост. Однако предоставленные решения работают только для 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 | внутренний | страница | номер

Надеюсь, это сэкономит кому-то немного времени, если он столкнется с подобной проблемой.

0 голосов
/ 26 сентября 2015

Используйте это (PHP 5.5 +):

echo reset(array_column($this->data, 'id'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...