Доступ к элементу массива PHP с помощью функции?

Я работаю над программой, которая использует указатели внутреннего массива PHP для итерации по многомерному массиву. Мне нужно получить элемент из текущей строки, и я делал это так:

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

Однако я бы предпочел использовать что-то вроде:

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

Я надеюсь, что есть функция, которую я пропустил при просмотре документации, которая позволит мне получить доступ к элементу следующим образом:

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

или же

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

Какие-либо предложения?

Вы уже нашли лучшее решение: $ arr [key ($ arr)] ['item']

Bill Karwin 28.12.2008 23:27

Подход getvalue был бы полезен даже для одномерных массивов. Это позволило бы обойти ограничения синтаксиса ≤5.3 и разрешить доступ к элементу из массива, скажем, возвращенному вызовом функции, непосредственно в одном операторе. Мне не хватает такой внутренней функции.

Glutexo 26.05.2015 08:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
15
2
13 567
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Я очень сомневаюсь, что такая функция есть, но написать тривиально

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

Обновлено: Начиная с PHP 5.4, вы можете индексировать элементы массива непосредственно из функциональных выражений current($arr)['item'].

Я думаю, что, наверное, этим и займусь. Если вы правы, что такой функции нет, это довольно плохая оплошность.

Kyle Cronin 28.12.2008 22:13

Вы уже пробовали использовать один из классы итераторов? Там может быть что-то, что делает именно то, что вы хотите. В противном случае вы, вероятно, сможете получить то, что хотите, расширив класс ArrayObject.

Просто взглянул на них - похоже, что это просто объектно-ориентированный способ перебора массива. ArrayIterator :: current возвращает текущий элемент почти так же, как функция current (), что на самом деле не является моей проблемой.

Kyle Cronin 28.12.2008 22:19

Если это не сработает, как составлен ваш многомерный массив? Может помочь var_dump ().

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


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

Итерация, которую я выполняю, на самом деле выполняется только по первичному массиву. Я сказал «многомерный», потому что соответствующие элементы основного массива сами по себе являются массивами, но я не хочу перебирать их - я просто хочу получить к ним удобный доступ.

Kyle Cronin 29.12.2008 20:14

Как насчет обработки $ arr [$ subkey] как массива или $ new_arr = array_values ​​($ arr [$ subkey])? Сноска: чем отличается запрошенный текущий ($ arr) ['item'] и текущий ($ arr ['item'])?

chelmertz 29.12.2008 22:29

Я часто использую

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

вместо

следующий ($ arr) / текущий ($ arr)

Я тоже использую это - ради вопроса я исключил тот факт, что на самом деле я просматриваю два отсортированных массива в поисках различий, и я почти уверен, что foreach не поддерживает такой доступ, но я могу ошибаться . В любом случае, спасибо за ответ. :)

Kyle Cronin 29.12.2008 20:17

Эта функция может быть немного длинноватой, но я использую ее постоянно, особенно в таких сценариях, как:

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');

Другие вопросы по теме