За последние 24 часа нас посетил 54401 программист и 1625 роботов. Сейчас ищут 1174 программиста ...

Почему in_array возвращает true на несуществующий в массиве элемент?

Тема в разделе "PHP для новичков", создана пользователем EndoCrinolog, 31 мар 2018.

Метки:
  1. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Есть массив. Есть строка. При выполнении функции in_array() возвращается true. Что я делаю не так?
    Код (Text):
    1. arrForming -> array(2) {
    2.   ["Timeout"]=>
    3.   int(2000)
    4.   ["UsedPost"]=>
    5.   int(0)
    6. }
    7. in_array("MaxPost", $arrForming) -> bool(true)
     
  2. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    1. не правильно оформляешь тему
    2. ходишь по форуму с идиотской подписью
     
    EndoCrinolog нравится это.
  3. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    А если по теме?
     
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    --- Добавлено ---
    выложи код
     
  5. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    PHP:
    1. 'Text' == 0
     
  6. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Функция синхронизации массивов. Есть дефолтный (по сути, образец) и тот, который на данный момент сохранен в файл. Если я что-то добавляю в дефолтном - это должно добавиться и в тот, который уже сохранен.

    Если это - велосипед и есть методы проще - с удовольствием выслушаю.

    Входящие данные:
    Код (Text):
    1. arrDefault: Array
    2. (
    3.     [Timeout] => 2000
    4.     [UsedPost] => 0
    5.     [MaxPost] => 10
    6.     [AppId] =>
    7.     [AppProtectKey] =>
    8.     [AppServiceKey] =>
    9. )
    10.  
    11. arrFile: Array
    12. (
    13.     [Timeout] => 2000
    14.     [UsedPost] => 0
    15. )
    Функция:
    PHP:
    1. function syncronize($arrDefault, $arrFile, $path)
    2. {
    3.     $arrForming = array();  // заготовка
    4.     foreach($arrFile as $param=>$value)
    5.     {  // если элемент из сохраненного есть в дефолтном - добавляю в заготовку
    6.         if ( in_array($param, $arrDefault) ) $arrForming[$param] = $value;
    7.     }
    8.  
    9.     foreach($arrDefault as $param=>$value)
    10.     {  // если значения из дефолтного нет в заготовке - добавить в заготовку
    11.         if ( !in_array($param, $arrForming) )
    12.         {
    13.             $arrForming[$param] = $value;
    14.         }
    15.     }  
    16.     ksort($arrForming);
    17.  
    18.     $json = json_encode($arrForming);
    19.  
    20.     file_put_contents($path, $json);
    21.  
    22.     return $arrForming;  
    23. }
    При запросе
    PHP:
    1. $GlobalSettings = syncronize($SettingsDefault, $Settings, $SettingsFile);
    выводит результат:
    Код (Text):
    1. arrForming: Array
    2. (
    3.     [Timeout] => 2000
    4.     [UsedPost] => 0
    5. )
    То есть, считает, что остальные в списке тоже есть. Поэтому, при коде
    PHP:
    1. var_dump( $arrForming );
    2.     echo 'in_array("MaxPost", $arrForming)';
    3.     var_dump( in_array("MaxPost", $arrForming) );
    почему-то возвращает true. Поэтому и спрашиваю - где может быть ошибка?
    --- Добавлено ---
    Я тоже сначала на это подумал, но почему тогда
    PHP:
    1. var_dump( in_array("MaxPost", $arrForming)
    возвращает true при параметрах
    Код (Text):
    1. arrForming: Array
    2. (
    3.     [Timeout] => 2000
    4.     [UsedPost] => 0
    5. )
    ?
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.815
    Симпатии:
    1.332
    Адрес:
    Лень
    in_array ( text, array, bool )
    --- Добавлено ---
    потому что гладиолус!
     
  8. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    А причем тут типы данных, если сравнивается текстовый параметр массива и искомая текстовая строка?
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.815
    Симпатии:
    1.332
    Адрес:
    Лень
    потому что вы не знаете как работает in_array
    +
    сравнение данных простое
    сравнение данных и с их type
     
  10. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Вот массив
    Код (Text):
    1. array(2) {
    2.   ["Timeout"]=>
    3.   int(2000)
    4.   ["UsedPost"]=>
    5.   int(0)
    6. }
    Почему
    Код (Text):
    1. in_array("Timeout", $arrForming)bool(true)
    и
    Код (Text):
    1. in_array("hello world", $arrForming)bool(true)
    ?
    И почему при установке флага true оба результата становятся false?
    Код (Text):
    1. in_array("Timeout", $arrForming, true)bool(false)
    2. in_array("hello world", $arrForming, true)bool(false)
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.815
    Симпатии:
    1.332
    Адрес:
    Лень
    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

    Если надо, переведешь на свой страх и риск.
     
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    @EndoCrinolog пожалуйста, уберите рекламу парсинга сайтов из подписи.
     
  13. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    блин, я дурак... Проверяет ЗНАЧЕНИЕ, А НЕ КЛЮЧ.. сука.. Прошу прощения...
    --- Добавлено ---
    Такая бешеная реклама... Ок..