За последние 24 часа нас посетили 23160 программистов и 1659 роботов. Сейчас ищут 868 программистов ...

Необычный поиск по массиву

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

  1. kowapos

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

    С нами с:
    18 янв 2013
    Сообщения:
    120
    Симпатии:
    0
    Всем привет.
    помогите пожалуйста произвести поиск по массиву. третий день мучаюсь.
    есть два массива

    Код (PHP):
    1. $haystack=[
    2.   [
    3.     'id_build'=>5,
    4.     'lvl'=>3
    5.   ],
    6.   [
    7.     'id_build'=>1,
    8.     'lvl'=>5
    9.   ],
    10.   [
    11.     'id_build'=>8,
    12.     'lvl'=>10
    13.   ],
    14.   [
    15.     'id_build'=>6,
    16.     'lvl'=>6
    17.   ],
    18.   
    19. ];
    20.  
    21. $needle=[1=>5,2=>1];
    22.  
    23.  
    в массиве $needle ключ - это id_build, значение - lvl.

    в данном примере, в массиве $haystack нет вложенного массива с id_build=2 и lvl=1. подскажите, как правильно организовать поиск? буду очень блпгодарен

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    не бойся пробовать!
    Код (PHP):
    1. array_search ($needle, $haystack); 
    при это needle должно быть массивом вида
    Код (PHP):
    1.   [
    2.     'id_build'=>2,
    3.     'lvl'=>1
    4.   ] 
     
  3. kowapos

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

    С нами с:
    18 янв 2013
    Сообщения:
    120
    Симпатии:
    0
    массив needle может быть таким?
    Код (PHP):
    1. [
    2.   [
    3.     'id_build'=>2,
    4.     'lvl'=>1
    5.   ],
    6. ]
    многомерным? нет возможности проверить

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  5. kowapos

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

    С нами с:
    18 янв 2013
    Сообщения:
    120
    Симпатии:
    0
    спасибо. но в многомерном не ищет. да и в принципе array_search не подходит, так как lvl в needle может будет меньше, чем lvl в haystack ((
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    array_filter — указываешь свою функцию фильтрации какую захочешь.

    Добавлено спустя 12 минут 51 секунду:
    Код (PHP):
    1. // $cond - условия key=>value
    2. // чтобы строка прошла фильтр, надо чтобы все указанные ключи существовали и все условия выполнились, 
    3. // (другими словами, используется связка условий по "И")
    4. function filter(array $in, array $cond)
    5. {
    6.     return array_filter(
    7.       $in,
    8.       function ($var) use($cond) { return $cond + $var == $var;  }
    9.     );
    10. }
    11.  
    12.     filter($haystack, ['id_build' => 5, 'lvl' => 3])
    13. );
    14.