Доступ к массиву по строковому ключу x, где x равно «123»

У нас есть массив, ключи которого являются строками, но эти строки иногда просто числа (например, «123»). При попытке доступа к массиву по ключу «123» мы получаем уведомление о неопределенном индексе. При доступе к нему с помощью целого числа 123 мы получаем уведомление о неопределенном смещении. Это говорит нам о том, что мы пытаемся правильно проиндексировать его, используя строку «123», но он все еще не установлен.

Пытаться найти пример для этого вопроса SO, это сложно, поскольку PHP преобразует ключи массива в нашем тесте case в целые числа автоматически, в то время как в нашем реальном приложении этого не происходит (из-за использования Java Bridge). Тестовый массив, который мы сейчас пробуем, выглядит следующим образом:

<?php
$array = array("123" => array(108, 8));
var_dump($array);
?>

Это возвращает:

array(1) { [123]=> array(2) { [0]=> int(108) [1]=> int(8) } }

В нашем реальном эквиваленте он вернет:

array(1) { ["123"]=> array(2) { [0]=> int(108) [1]=> int(8) } }

Итак, в реальном мире индекс фактически является строкой:

<?php
var_dump(array_keys($array));
?>

возвращает

array(1) { [0]=> string(3) "123" }

Итак, наконец, вопрос заключается в выводе следующего кода:

<?php
foreach ($array as $key => $value) {
    if (!isset($array[$key])) {
        print "What is happening here?";
    }
} 
?>

который дает:

What is happening here?

Основываясь на комментарии Йоши, вот рабочий тестовый код:

<?php
$array = (array)json_decode('{"123":[108,8]}');
foreach ($array as $key => $value) {
    if (!isset($array[$key])) {
        print "What is happening here?";
    } else {
        print "Nothing to see here, move along";
    }
} 
?>
5
задан drvdijk 10 August 2011 в 09:57
поделиться