За последние 24 часа нас посетили 22536 программистов и 1145 роботов. Сейчас ищут 624 программиста ...

Поиск в массиве

Тема в разделе "PHP для новичков", создана пользователем zhenia3003, 13 дек 2017.

  1. zhenia3003

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

    С нами с:
    20 авг 2012
    Сообщения:
    179
    Симпатии:
    3
    Разбиваю строку на массив, ищу совпадение по id, вывожу найденное в массиве значение. Как сделать проще и короче данную функцию?
    PHP:
    1.    
    2. $id = '2';
    3. $str = '1_56_0,2_0_0,3_6_0';
    4. function item($str, $id){
    5.         foreach (explode(",", $str) as $key) {
    6.             $cook = explode("_", $key);
    7.             if($cook[0] == $id){
    8.                 $r[] = $key;
    9.                 break;
    10.             }
    11.         }
    12.         return $r[0];
    13.     }
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @zhenia3003, вы не учитываете то, что может быть два и более совпадения - '1_56_0,2_0_0,3_6_0,2_8_1,2_25_3'?
    PHP:
    1. $id = '2';
    2. $str = '1_56_0,2_0_0,3_6_0,2_2_1';
    3.  
    4. preg_match('/(?<=^|,)'.$id.'_\d+_\d+(?=,|$)/', $str, $matches);
    5. print_r($matches);
    6. // или
    7. preg_match_all('/(?<=^|,)'.$id.'_\d+_\d+(?=,|$)/', $str, $matches);
    8. print_r($matches);
     
  3. zhenia3003

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

    С нами с:
    20 авг 2012
    Сообщения:
    179
    Симпатии:
    3
    Спасибо. По поводу совпадений, $str заранее сформирован без совпадений