Доступ к элементу массива PHP с функцией?
Я работаю над программой, которая использует внутренние указатели массива PHP для итерации по многомерному массиву. Мне нужно получить элемент из текущей строки, и я делаю это так:
$arr[key($arr)]['item']
Однако я бы предпочел использовать что-то вроде:
current($arr)['item'] // invalid syntax
Я надеюсь, что там есть функция, которую я пропустил при проверке документации, которая позволила бы мне получить доступ к элементу следующим образом:
getvalue(current($arr), 'item')
или
current($arr)->getvalue('item')
Любые предложения?
Ответы
Ответ 1
Я очень сомневаюсь, что существует такая функция, но тривиально писать
function getvalue($array, $key)
{
return $array[$key];
}
Изменить: Начиная с PHP 5.4, вы можете индексировать элементы массива непосредственно из выражений функций, current($arr)['item']
.
Ответ 2
Вы еще не пытались использовать один из классов итераторов? Там может быть что-то, что делает именно то, что вы хотите. Если нет, вы можете получить то, что хотите, расширив класс ArrayObject.
Ответ 3
Эта функция может быть немного длинной, но я использую ее все время, особенно в сценарии вроде:
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');
Ответ 4
Если это не сработает, как создается ваш многомерный массив? Может помочь var_dump().
$subkey = 'B';
$arr = array(
$subkey => array(
'AB' => 'A1',
'AC' => 'A2'
)
);
echo current($arr[$subkey]);
next($arr[$subkey]);
echo current($arr[$subkey]);
Ответ 5
Я часто использую
foreach ($arr as $key=>$val) {
$val['item'] /*$val is the value of the array*/
$key /*$key is the key used */
}
вместо
следующий ($ обр)/ток ($ обр)