Вполне возможно, что это НЕ то, что можно воспроизвести с помощью копирования и вставки. У меня проблема в том, что array_key_exists
просто не работает.
Я напечатал свой код на странице; это определенно тип массив, не то, что требуется. Ключ массива существует; Я произвел приведение между строкой и целым числом, и оно возвращается не найденным.
Теперь, где это становится самым загадочным, я итерировал между
$presets = $this->presets->$name;
echo gettype($version).'<br>';
foreach ( $presets as $key=>$test ) {
if ( $key===$version ) echo 'string found1<br>';
elseif ( $key==$version ) echo 'string found2<br>';
}
if ( !array_key_exists($version,$presets) )
echo 'array_key_exists string fail.<br>';
$version = intval($version);
echo gettype($version).'<br>';
foreach ( $presets as $key=>$test ) {
if ( $key===$version ) echo 'int found1<br>';
elseif ( $key==$version ) echo 'int found2<br>';
}
if ( !array_key_exists($version,$presets) )
echo 'array_key_exists int fail.<br>';
Выход:
string
string found1
array_key_exists string fail.
integer
int found2
array_key_exists int fail.
Вывод абсолютно странный, поскольку в обоих запросах int
& string
ключ совпадает. Фактически, в поиске string
он выводит «string found1», что означает, что он === ключ в массиве. Итак, почему array_key_exists
ВСЕГДА производит FALSE
?
Переменная $presets
- это некоторый массив, индексы которого создаются с использованием кодов регулярных выражений preg_match для анализа индексов. Это единственная загадка, которую я могу придумать, хотя ручное сравнение показало, что было обнаружено значение ===, и поэтому ничего из этого не должно иметь значения. array_key_exists
должен вернуть TRUE
Array
(
[100] => stdClass Object
()
)