Доступ к элементу массива PHP с помощью функции? - PullRequest
15 голосов
/ 28 декабря 2008

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

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

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

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

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

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

или

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

Есть предложения?

Ответы [ 5 ]

12 голосов
/ 28 декабря 2008

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

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

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

1 голос
/ 28 декабря 2008

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

0 голосов
/ 29 апреля 2009

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

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');
0 голосов
/ 29 декабря 2008

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

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

вместо

следующий ($ обр) / ток ($ обр)

0 голосов
/ 29 декабря 2008

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

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


echo current($arr[$subkey]);
next($arr[$subkey]);
echo current($arr[$subkey]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...