За последние 24 часа нас посетили 17704 программиста и 1658 роботов. Сейчас ищут 960 программистов ...

array_search нахождение подстроки

Тема в разделе "PHP для новичков", создана пользователем sumsum, 17 июн 2014.

  1. sumsum

    sumsum Новичок

    С нами с:
    13 май 2014
    Сообщения:
    96
    Симпатии:
    0
    Пробую так:
    $array = array("Одноклассник", "ПТУшник");
    $key = array_search('клас', $array);
    не получается
     
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    зачем array_search тут?

    strpos вполне достаточно
     
  3. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Что требуется найти? В вашем случае array_search вернет false так - как, "клас" значение отсутствует, и ключ вернуть не получится.
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    В PHP нет функции для поиска подстроки в элементах массива.
     
  5. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    array_search - Возвращает ключ значение каторые ты шукаеш!!!

    Код (PHP):
    1. $array = array("клас", "ПТУшник");
    2. $key = array_search('клас', $array);//вернет 0
    3.  
     
  6. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Но это ведь язык программирования? Так вотс а проблям? Летс ду ит квик!

    Код (PHP):
    1. <?php
    2.   $array = array("Одноклассник", "ПТУшник","Мастеркласс");
    3.   $result = array();
    4.   foreach ($array as  $key=>$val){
    5.     if (strpos($val, 'класс')!==false){
    6.       $result[] = $key;
    7.     }
    8.   }
    9.   var_dump ($result); //array(2) { [0]=> int(0) [1]=> int(2) }
    10. ?>
    Добавлено спустя 1 минуту 38 секунд:
    Сначала надо читать документацию к функциям, а потом уже их использовать. А не пытаться догадываться по названию, что она делает.
     
  7. sumsum

    sumsum Новичок

    С нами с:
    13 май 2014
    Сообщения:
    96
    Симпатии:
    0
    А я переписал на свою функцию, оцените

    function array_search2($search,$arr)
    {
    if($search===""){return 0;}
    for($i=0;$i<count($arr);$i++)
    {
    if(strpos($arr[$i],$search)!== false)
    {
    $res = $i; return $res;
    }
    }
    }
     
  8. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Почему

    Код (Text):
    1.  if($search==="")
    2.     {
    3.       return 0;
    4.     }
    ??
    А если надо найти элементы с пустой строкой?

    Код (Text):
    1. if(strpos($arr[$i],$search)!== false)
    2.         {
    3.         $res = $i; return $res;
    4.         }
    1)Зачем делать $res = $i; return $res;, если можно return$i?
    2)А если в массиве больше одного элемента, удовлетворяющего условиям поиска? Что тогда делать?

    А теперь внимательно изучи тот код, что я написал и посмотри, как там решаются все вышеописанные проблемы.

    Вот, в виде функции с теми же входящими параметрами:
    Код (PHP):
    1.  function array_search2($search,$arr)
    2.   {
    3.     $result = array();
    4.     foreach ($arr as  $key=>$val){
    5.       if (strpos($val, $search)!==false){
    6.         $result[] = $key;
    7.       }
    8.     }
    9.     return $result;
    10.   }
     
  9. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
  10. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    чем принципиально отличается от моего кода, кроме создания совершенно ненужной переменной?)
     
  11. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    ты смайлики видишь? ) а они есть )))

    я в том смысле что такую задачу я уже когда то забукмарил )
     
  12. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    https://gist.github.com/artoodetoo/0379133f2c9fe88407ff

    Код (PHP):
    1. function array_usearch($needle, $haystack, $callback)
    2. {
    3.     foreach ($haystack as $key => $value) {
    4.         if (call_user_func($callback, $needle, $value) !== false) {
    5.             return $key;
    6.         }
    7.     }
    8.     return false;
    9. } 
     
  14. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Что делать, если надо вернуть несколько ключей? Зачем так усложнять простые вещи, ребят? Оверинжиниринг - это зло.
     
  15. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    очевидно написать другую функцию )))

    Добавлено спустя 4 минуты 25 секунд:
    Fell-x27, я тебя правильно понял, ты имел в виду "что делать, если вместо твоей функции надо написать функцию как у меня?" )))

    p.s. выбор такой: функция, которая умеет больше, чем требуется и функция, которая делает не то, что требуется.
    слово за топикстартером.