Список ключей массива переменных PHP - PullRequest
1 голос
/ 30 января 2011

У меня есть многомерный массив, где это работает:

print_r( $temp[1][0] );

Как я могу заставить это работать ... У меня есть список ключей в виде строки:

$keys = "[1][0]";

Я хочу получить доступ к массиву, используя список строк ключей, как это можно сделать? Это работает, но ключи, очевидно, жестко закодированы:

$keys = "[1][0]";
$tempName = 'temp';

print_r( ${$tempName}[1][0] );

// tried lots of variations like, but they all produce errors or don't access the array
print_r( ${$tempName.${$keys}} );

Спасибо, Chris

1 Ответ

4 голосов
/ 30 января 2011
function accessArray(array $array, $keys) {
    if (!preg_match_all('~\[([^\]]+)\]~', $keys, $matches, PREG_PATTERN_ORDER)) {
        throw new InvalidArgumentException;
    }

    $keys = $matches[1];
    $current = $array;
    foreach ($keys as $key) {
        $current = $current[$key];
    }

    return $current;
}

echo accessArray(
    array(
        1 => array(
            2 => 'foo'
        )
    ),
    '[1][2]'
); // echos 'foo'

Было бы еще лучше, если бы вы передали array(1, 2) вместо [1][2]: можно было бы избежать (хрупкого) анализа preg_match_all.

...