Есть массив. Есть строка. При выполнении функции in_array() возвращается true. Что я делаю не так? Код (Text): arrForming -> array(2) { ["Timeout"]=> int(2000) ["UsedPost"]=> int(0) } in_array("MaxPost", $arrForming) -> bool(true)
Функция синхронизации массивов. Есть дефолтный (по сути, образец) и тот, который на данный момент сохранен в файл. Если я что-то добавляю в дефолтном - это должно добавиться и в тот, который уже сохранен. Если это - велосипед и есть методы проще - с удовольствием выслушаю. Входящие данные: Код (Text): arrDefault: Array ( [Timeout] => 2000 [UsedPost] => 0 [MaxPost] => 10 [AppId] => [AppProtectKey] => [AppServiceKey] => ) arrFile: Array ( [Timeout] => 2000 [UsedPost] => 0 ) Функция: PHP: function syncronize($arrDefault, $arrFile, $path) { $arrForming = array(); // заготовка foreach($arrFile as $param=>$value) { // если элемент из сохраненного есть в дефолтном - добавляю в заготовку if ( in_array($param, $arrDefault) ) $arrForming[$param] = $value; } foreach($arrDefault as $param=>$value) { // если значения из дефолтного нет в заготовке - добавить в заготовку if ( !in_array($param, $arrForming) ) { $arrForming[$param] = $value; } } ksort($arrForming); $json = json_encode($arrForming); file_put_contents($path, $json); return $arrForming; } При запросе PHP: $GlobalSettings = syncronize($SettingsDefault, $Settings, $SettingsFile); выводит результат: Код (Text): arrForming: Array ( [Timeout] => 2000 [UsedPost] => 0 ) То есть, считает, что остальные в списке тоже есть. Поэтому, при коде PHP: var_dump( $arrForming ); echo 'in_array("MaxPost", $arrForming)'; var_dump( in_array("MaxPost", $arrForming) ); почему-то возвращает true. Поэтому и спрашиваю - где может быть ошибка? --- Добавлено --- Я тоже сначала на это подумал, но почему тогда PHP: var_dump( in_array("MaxPost", $arrForming) возвращает true при параметрах Код (Text): arrForming: Array ( [Timeout] => 2000 [UsedPost] => 0 ) ?
потому что вы не знаете как работает in_array + сравнение данных простое сравнение данных и с их type
Вот массив Код (Text): array(2) { ["Timeout"]=> int(2000) ["UsedPost"]=> int(0) } Почему Код (Text): in_array("Timeout", $arrForming)bool(true) и Код (Text): in_array("hello world", $arrForming)bool(true) ? И почему при установке флага true оба результата становятся false? Код (Text): in_array("Timeout", $arrForming, true)bool(false) in_array("hello world", $arrForming, true)bool(false)
gjnjve xnj e nt,z hfr vjpuf/ Vtcnj njuj xnj,s dxbnsdfnmcz d rf;ljt ckjdj? yflj gjcnjzyyj lt,bkmyst djghjcs pflfdfnm/ Yfgbcfkb ;t ,kznm xnj nbg lfyys[ ye;yj ghjdthzn ? nj xnj 1 == true 'nj ndj. vfnm jlyj b nj;t/ Bydfkbl Если надо, переведешь на свой страх и риск.
блин, я дурак... Проверяет ЗНАЧЕНИЕ, А НЕ КЛЮЧ.. сука.. Прошу прощения... --- Добавлено --- Такая бешеная реклама... Ок..