За последние 24 часа нас посетили 74535 программистов и 10147 роботов. Сейчас ищут 2305 программистов ...

Поиск в массиве по неполному значению, вывод его ключа

Тема в разделе "PHP для новичков", создана пользователем olja1, 28 мар 2016.

  1. olja1

    olja1 Новичок

    С нами с:
    28 мар 2016
    Сообщения:
    19
    Симпатии:
    0
    Помогите, пожалуйста, как сделать поиск в массиве по неполному значению и вывести его ключ?
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    пройди циклом по всему массиву и поищи в каждой строке.

    А ты думаешь, что если ты будешь тупо копипастить код, то сможешь хоть чему-то научиться? Или ты думаешь, что продавец сотовых телефонов хорошо зарабатывает против программиста? Если тебе препод даёт задание, то оно нужно для того, чтобы ты учился. Иначе будешь мобильники толкать. Мозги надо прокачивать, как в спортзале. Тренируй.
     
  3. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    strpos, mb_strpos, preg_match, цикл foreach
     
  4. olja1

    olja1 Новичок

    С нами с:
    28 мар 2016
    Сообщения:
    19
    Симпатии:
    0
    Делала, не работает.
    $arr - массив
    делаю:
    Код (PHP):
    1. foreach ($arr as $value) {
    2.    $key = array_search('.04', $value); 
    3.    echo $key;
    4. }  
    Итог: ничего не выводит(

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  5. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    а что у тебя где?
     
  6. olja1

    olja1 Новичок

    С нами с:
    28 мар 2016
    Сообщения:
    19
    Симпатии:
    0
    Вот вывод моего массива:
    Array ( [0] => 14-15.03 [1] => 18-19.04 [2] => 16-17.05 [3] => 20-21.06 [4] => 18-19.07 [5] => 15-16.08 [6] => 19-20.09 [7] => 17-18.10 [8] => 14-15.11 [9] => 12-13.12 )
     
  7. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    а где написано что array_search ищет часть совпадения?
     
  8. olja1

    olja1 Новичок

    С нами с:
    28 мар 2016
    Сообщения:
    19
    Симпатии:
    0
    нигде, а какая функция ищет?
     
  9. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    mkramer указал функции
     
  10. olja1

    olja1 Новичок

    С нами с:
    28 мар 2016
    Сообщения:
    19
    Симпатии:
    0
    Вот foreach + strpos

    Код (PHP):
    1. foreach ($arr as $value) {
    2. $key = strpos($value, '.04' );
    3.    echo $key;
    4. }  
    Выводит ерунду

    foreach + mb_strpos - вообще ничего не выводит

    preg_match возвращает количество найденных соответствий, а мне ключ нужен

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    это слишком размыто
     
  12. olja1

    olja1 Новичок

    С нами с:
    28 мар 2016
    Сообщения:
    19
    Симпатии:
    0
    Например, верный ключ - 2, а вывело 6

    Кстати, спасибо всем за помощь в моем поиске!
     
  13. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    489
    Симпатии:
    21
    для этого придётся делать так foreach($arr as $key => $val)
    правильно strpos не должен ключ выводить

    Добавлено спустя 1 минуту 17 секунд:
    у вас он ищет, есть ли строка '.04' в строке $val
     
  14. olja1

    olja1 Новичок

    С нами с:
    28 мар 2016
    Сообщения:
    19
    Симпатии:
    0
    Делаю так:
    Код (PHP):
    1. foreach ($arr as $key => $val) {
    2.    echo strpos('.04', $val);
    3.    } 
    ничего не выводит

    где ошибка?

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  15. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    489
    Симпатии:
    21
    попробуйте mb_strpos(). А вообще должно работать, может совпадений нет.

    Добавлено спустя 1 минуту 42 секунды:
    Сразу не заметил. используйте функцию правильно strpos($val, '.04')
     
  16. olja1

    olja1 Новичок

    С нами с:
    28 мар 2016
    Сообщения:
    19
    Симпатии:
    0
    Исправила, но со strpos нашла только номер символа в значении, с которого начинается '.04', мне это не надо.
    Мне ключ строки найти надо, где есть '.04'
     
  17. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    489
    Симпатии:
    21
    Код (PHP):
    1. foreach ($arr as $key => $val) {
    2.    if (strpos($val, '.04'){
    3.       echo $key;
    4.    };
    5. }  
    этот код выведет все ключи в значении которых есть подстрока '.04'
     
  18. olja1

    olja1 Новичок

    С нами с:
    28 мар 2016
    Сообщения:
    19
    Симпатии:
    0
    дает ошибку 500
     
  19. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    там в иф скобку забыли
     
  20. olja1

    olja1 Новичок

    С нами с:
    28 мар 2016
    Сообщения:
    19
    Симпатии:
    0
    ура, победа!

    Добавлено спустя 15 минут 34 секунды:
    Спасибо большооооое всем!!!!!
    Люблю php!!!! :)
     
  21. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    В голове у тебя есть ошибочка. Если ты видишь функцию, нужно обязательно зайти и почитать, что именно она делает и что возвращает.

    Эта функция может возвращать ноль, если нашла твою искомую строку с первого же символа, т.к. исчисление позиции идёт с нуля.
    Плюс к этому, она возвращает фалс, который превращается в ничто при выводе через echo. Это значит, что она не нашла ничего. А ключ массива, да, он не внутри его значения живёт, это ж надо понимать, блин.
     
  22. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    489
    Симпатии:
    21
    Вот я лошара. И скобку не закрыл, и условие неправильное написал.
     
  23. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Нельзя так подрастающее поколение учить. В доках же написано по этому поводу
    Код (PHP):
    1. if (strpos($val, '.04') !== false)
    2.