За последние 24 часа нас посетил 22241 программист и 1166 роботов. Сейчас ищут 673 программиста ...

Фильтрация одного массива другим массивом

Тема в разделе "PHP для новичков", создана пользователем Михаил77, 17 апр 2020.

Метки:
  1. Михаил77

    Михаил77 Активный пользователь

    С нами с:
    16 окт 2019
    Сообщения:
    31
    Симпатии:
    0
    Добрый день!

    Кто знает как можно произвести фильтрацию одного массива с помощью значений другого массива

    PHP:
    1. <?
    2. /// Имеется массив ///
    3.  
    4. $myArray = array (
    5.     array (
    6.         'ID' => 1,
    7.         'NAME' => "Восемь",
    8.     ),
    9.     array (
    10.         'ID' => 2,
    11.         'NAME' => "Два",
    12.     ),
    13.     array (
    14.         'ID' => 4,
    15.         'NAME' => "Пять",
    16.     ),
    17.     array (
    18.         'ID' => 5,
    19.         'NAME' => "Два",
    20.     ),
    21.     array (
    22.         'ID' => 6,
    23.         'NAME' => "Шесть",
    24.     ),
    25.     array (
    26.         'ID' => 7,
    27.         'NAME' => "Два",
    28.     ),
    29.     array (
    30.         'ID' => 3,
    31.         'NAME' => "Три",
    32.     ),
    33. );
    34.  
    35. /// Функция фильтрации по двум значениям ///
    36.  
    37. function filter($value)
    38. {
    39.      return $value["NAME"] == "Два" || $value["NAME"] == "Три";
    40. }
    41.  
    42. $filtered = array_filter($myArray, filter);
    43.  
    44. print_r($filtered);
    45.  
    46. /// Получаю фильтрованный массив где NAME = Два или NAME = Три ///
    47.  
    48.      [1] => Array (
    49.           [ID] => 2
    50.           [NAME] => Два
    51.      )
    52.      [4] => Array (
    53.           [ID] => 5
    54.           [NAME] => Два
    55.      )
    56.      [6] => Array (
    57.           [ID] => 7
    58.           [NAME] => Два
    59.      )
    60.      [6] => Array (
    61.           [ID] => 3
    62.           [NAME] => Три
    63.      )
    64. )
    65. ?>
    Можно ли в функции указать не значения NAME == "Два"
    или NAME == "Три" а например массив значений?

    PHP:
    1. <?
    2. /// Массив значений которые необходимо найти в массиве myArray
    3. $value = array(
    4.     array (
    5.         'ID' => 1,
    6.         'NAME' => "Два",
    7.     ),
    8.     array (
    9.         'ID' => 2,
    10.         'NAME' => "Три",
    11.     ),
    12. );
    13.  
    14. /// Типа вот такой конструкции ///
    15.  
    16. function filter($value)
    17. {
    18.       return array(
    19.           $value["NAME"] => "Два",
    20.           $value["NAME"] => "Три",
    21.      );
    22. }
    23.  
    24. $filtered = array_filter($myArray, filter);
    25. ?>
     
  2. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    PHP:
    1. <?php
    2. $myArray = array (
    3.     array (
    4.         'ID' => 1,
    5.         'NAME' => "Восемь",
    6.     ),
    7.     array (
    8.         'ID' => 2,
    9.         'NAME' => "Два",
    10.     ),
    11.     array (
    12.         'ID' => 4,
    13.         'NAME' => "Пять",
    14.     ),
    15.     array (
    16.         'ID' => 5,
    17.         'NAME' => "Два",
    18.     ),
    19.     array (
    20.         'ID' => 6,
    21.         'NAME' => "Шесть",
    22.     ),
    23.     array (
    24.         'ID' => 7,
    25.         'NAME' => "Два",
    26.     ),
    27.     array (
    28.         'ID' => 3,
    29.         'NAME' => "Три",
    30.     ),
    31. );
    32.  
    33. $find = array ("Два", "Три");
    34.  
    35. $filtered = array_filter($myArray, function($e) use ($find) {
    36.     return in_array($e['NAME'], $find);
    37. });
    38.  
    39. print_r($filtered);
     
  3. Михаил77

    Михаил77 Активный пользователь

    С нами с:
    16 окт 2019
    Сообщения:
    31
    Симпатии:
    0
    Круто! Большое Вам спасибо, то что нужно было : )

    А такая конструкция может позволить производить фильтрацию одновременно по двум разным значениям,
    например по NAME и по PROPERTY?

    PHP:
    1. $myArray = array (
    2.     array (
    3.         'ID' => 1,
    4.         'NAME' => "Восемь",
    5.         'PROPERTY' => 500,
    6.     ),
    7.     array (
    8.         'ID' => 2,
    9.         'NAME' => "Два",
    10.         'PROPERTY' => 300,
    11.     ),
    12.     array (
    13.         'ID' => 4,
    14.         'NAME' => "Пять",
    15.         'PROPERTY' => 500,
    16.     ),
    17.     array (
    18.         'ID' => 5,
    19.         'NAME' => "Два",
    20.         'PROPERTY' => 800,
    21.     ),
    22.     array (
    23.         'ID' => 6,
    24.         'NAME' => "Шесть",
    25.         'PROPERTY' => 900,
    26.     ),
    27.     array (
    28.         'ID' => 7,
    29.         'NAME' => "Два",
    30.         'PROPERTY' => 100,
    31.     ),
    32.     array (
    33.         'ID' => 3,
    34.         'NAME' => "Три",
    35.         'PROPERTY' => 700,
    36.     ),
    37. );
    /// Что то типа такого ///

    PHP:
    1. $find1 = array ("Два", "Три");
    2. $find2 = array (100, 700);
    3.  
    4. $filtered = array_filter($myArray, function($e) use ($find1, $find2) {
    5.     return in_array($e['NAME'], $find1);
    6.     return in_array($e['PROPERTY'], $find2);
    7. });
    8.  
    9. print_r($filtered);
     
  4. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    $sql запрос, храните данные в бд