ФорумПрограммированиеPHP для идиотов → Нипанятки с in_array

Нипанятки с in_array

  • Hight

    Сообщения: 1489 Репутация: N Группа: Адекваты

    Spritz 7 января 2011 г. 20:24

    <?php header('Content-Type: text/html; charset=utf-8');

    /* Из мана:
    * range — Создать массив, содержащий диапазон элементов
    * in_array — Проверить, присутствует ли в массиве значение
    */

    // Массив в диапазоне элементов типа int от 1 до 10
    $int_range_arr = range(1, 10);

    // Посмотрим на содержимое массива
    echo'<pre>'; print_r($int_range_arr); echo'</pre>';

    // Строка
    $string = '9 моё любимое число';

    // Проверим, присутствует ли строка в массиве - ПРИСУТСТВУЕТ!!! Не понимаю!!!
    if(in_array($string, $int_range_arr)) echo'Строка "9 моё любимое число" входит в диапазон от 1 до 10<br>';

    // А теперь проверим в strict mode - НЕ ПРИСУТСТВУЕТ. Понимаю.
    if(in_array($string, $int_range_arr, true)) echo'Строка "9 моё любимое число" входит в диапазон от 1 до 10<br>';

    // Число
    $int = 9;

    // Проверим, присутствует ли число в массиве - ПРИСУТСТВУЕТ. Понимаю.
    if(in_array($int, $int_range_arr)) echo'Число "9" входит в диапазон от 1 до 10<br>';

    // А теперь проверим в strict mode - ПРИСУТСТВУЕТ. Понимаю.
    if(in_array($int, $int_range_arr, true)) echo'Число "9" входит в диапазон от 1 до 10<br>';

    /*
    *
    * Внимание, Вопрос знатокам! Почему в первом случае функция in_array возвращает true?!
    *
    */

    ?>
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 7 января 2011 г. 20:34, спустя 9 минут 38 секунд

    Hight, магия динамической типизации
    Сапожник без сапог
  • Hight

    Сообщения: 1489 Репутация: N Группа: Адекваты

    Spritz 7 января 2011 г. 20:36, спустя 2 минуты 41 секунду

    phpdude, я понимаю, что это магия. Но это какая-то неправильная магия. Я из-за этой магии нихуёво наебался.

    upd. На самом деле я думаю, что это ошибка. Если строку:
    $string = '9 моё любимое число';

    Заменить на:
    $string = 'моё любимое число 9';

    То функция in_array вернёт false

    Это же пиздец.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 7 января 2011 г. 20:54, спустя 17 минут 19 секунд

    Hight, выполни и задумайся.

    <?
    echo 0 == 'ebanis, ara' ? 'ebanii v rot!' : 'uh, ia to dumal vi sovsem ohueli';
    Сапожник без сапог
  • Hight

    Сообщения: 1489 Репутация: N Группа: Адекваты

    Spritz 7 января 2011 г. 21:02, спустя 8 минут 40 секунд

    phpdude, не прикалывайся. Твой код понятен. Ты нулю присвоил значение, а это true. Это нормально. А с in_array говно какое-то получилось.

    // гоню. =)

    upd. 0 == false

    Смотрим:
    echo 0 == 'ebanis, ara' ? 'ebanii v rot!' : 'uh, ia to dumal vi sovsem ohueli';
    // ebanii v rot!

    Смотрим:
    echo false == 'ebanis, ara' ? 'ebanii v rot!' : 'uh, ia to dumal vi sovsem ohueli';
    // uh, ia to dumal vi sovsem ohueli

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 7 января 2011 г. 21:03, спустя 48 секунд

    Hight, уху, сам почитаешь как пхп работает, или тебе ссылку ткнуть?)
    Сапожник без сапог
  • Hight

    Сообщения: 1489 Репутация: N Группа: Адекваты

    Spritz 7 января 2011 г. 21:05, спустя 1 минуту 23 секунды

    phpdude, давай ссылку. А то я перестал пэхапэ понимать. Он сука раньше не так работал.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 7 января 2011 г. 21:11, спустя 6 минут 42 секунды

  • Hight

    Сообщения: 1489 Репутация: N Группа: Адекваты

    Spritz 8 января 2011 г. 23:55, спустя 1 день 2 часа 43 минуты

    Я сделал свою функция in_array с блекджеком и шлюхами:
    function my_in_array($needle, $haystack = array(), $type = 'string', $default = null)
    {
       settype($needle, $type);
       return in_array($needle, $haystack, true)? $needle : ($default? $default : false);
    }
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 9 января 2011 г. 10:50, спустя 10 часов 55 минут 42 секунды

    какой лютый бешеный кодинг
    Спустя 148 сек.
    my_in_array(9, array(9,10));

    вернёт false
    Спустя 136 сек.
    и вот это пиздато:
    $default = null

    return … $default? $default : false


    не проще сразу в аргументах сделать $default = false;

    return in_array($needle, $haystack, true)? $needle : $default;
    не всё полезно, что в swap полезло
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 9 января 2011 г. 11:14, спустя 24 минуты 6 секунд

    тебе нужна вот такая функция

    function in_array_scalar($needle, $haystack, $strict=false){
    if ((is_scalar($needle) || $needle === null) && !$strict){
     foreach($haystack as &$h){
      settype($h, 'string');
     }
     settype($needle, 'string');
    }
    return in_array($needle, $haystack, $strict);
    }

    print in_array_scalar('9 - моё любимое число', array(9, 10));
    Спустя 47 сек.
    кстати кто не пробовал

    print null == array();


    охуенно ящитаю
    не всё полезно, что в swap полезло
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 9 января 2011 г. 12:24, спустя 1 час 9 минут 24 секунды

    охуенно ящитаю

    да .. пхп жжет :D
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи
  • Hight

    Сообщения: 1489 Репутация: N Группа: Адекваты

    Spritz 9 января 2011 г. 16:41, спустя 3 часа 25 минут 59 секунд

    master, не пизди. Мне нужна моя функция с доп. параметрами. =)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 9 января 2011 г. 16:52, спустя 11 минут 7 секунд

    Hight, bullshitcoder :D
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!