Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Поиск в двумерном массиве и вставка значений

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
WhitePlague
Отправлено: 09 Сентября, 2020 - 16:41:33
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Сент. 2020  


Помог: 0 раз(а)




Добрый день, уважаемые форумчане.

Помогите, пожалуйста, с одним вопросом:

Есть 2 двумерных массива

  • массив параметров
    PHP:
    скопировать код в буфер обмена
    1.  
    2. $table = array(
    3.     array (
    4.         "ARTICULE" => "2XBL-16",
    5.         "WIDTH" => 1860,
    6.         "HEIGHT" => 1806,
    7.         "DEEP" => 994,
    8.         "WEIGHT" => 118,
    9.     ),
    10.     array (
    11.         "ARTICULE" => "2XBL-15",
    12.         "WIDTH" => 1930,
    13.         "HEIGHT" => 1807,
    14.         "DEEP" => 994,
    15.         "WEIGHT" =>122,
    16.     ),
    17.     array (
    18.         "ARTICULE" => "2XBL-13",
    19.         "WIDTH" => 1920,
    20.         "HEIGHT" => 1800,
    21.         "DEEP" => 994,
    22.         "WEIGHT" =>122,
    23.         ),
    24.     );
    25.  

  • Массив с товарами, в котором необходимо заполнить характеристики
    PHP:
    скопировать код в буфер обмена
    1.  
    2.     $products = array (
    3.         array (
    4.             "NAME" => "Товар такой-то, арт. 2XBL-16",
    5.             "PROPERTY_0" => "",
    6.             "PROPERTY_1" => "",
    7.             "PROPERTY_2" => "",
    8.             "ARTICULE" => "2XBL-16L",
    9.         ),
    10.         array (
    11.             "NAME" => "Товар такой-то, арт. 2XBL-13",
    12.             "PROPERTY_0" => "",
    13.             "PROPERTY_1" => "",
    14.             "PROPERTY_2" => "",
    15.             "ARTICULE" => "2XBL-13R",
    16.         ),
    17.     );
    18.  



    Вопрос такой, какой алгоритм позволит мне сравнить данные артикула из 1-го массива с NAME или ARTICULE во втором и записать WIDTHxHEIGHTxDEEP в PROPERTY_0?

    (Отредактировано автором: 09 Сентября, 2020 - 16:59:41)

  •  
     Top
    LIME
    Отправлено: 09 Сентября, 2020 - 22:20:09
    Post Id


    Активный участник


    Покинул форум
    Сообщений всего: 10732
    Дата рег-ции: Нояб. 2010  


    Помог: 322 раз(а)




    алгоритм nested loop
     
     Top
    WhitePlague
    Отправлено: 10 Сентября, 2020 - 07:55:58
    Post Id


    Новичок


    Покинул форум
    Сообщений всего: 2
    Дата рег-ции: Сент. 2020  


    Помог: 0 раз(а)




    LIME пишет:
    алгоритм nested loop


    Это я понимаю, мне нужна корректная реализация, наверное, это будет как-то так:
    PHP:
    скопировать код в буфер обмена
    1.  
    2. foreach ($table as $key_table1 => $subarray1) {
    3.    foreach ($subarray1 as $key_subarray1 => $value_param_subarray1) {
    4.       foreach ($products as $key_products => $subarray_products) {
    5.          foreach ($subarray_products as $key_subarray2 => $value_param_subarray2) {
    6.              //...корректная реализация поиска
    7.          }  
    8.       }
    9.    }  
    10. }
    11.  


    вопрос, наверное, будет уже такой (не оффтопный) : Как произвести во вложенных форычах корректный поиск по полю ARTICULE и произвести вставку полей из table (высоту, ширину и высоту ) при совпадении (L или R в конце артикулов роли не играют) в одно поле в массиве $products?

    (Отредактировано автором: 10 Сентября, 2020 - 08:00:36)

     
     Top
    Мелкий Супермодератор
    Отправлено: 10 Сентября, 2020 - 10:31:10
    Post Id



    Активный участник


    Покинул форум
    Сообщений всего: 11926
    Дата рег-ции: Июль 2009  
    Откуда: Россия, Санкт-Петербург


    Помог: 618 раз(а)




    hash join тут уместнее и проще, думается.
    PHP:
    скопировать код в буфер обмена
    1. $hashtable = [];
    2. foreach ($table as $r) {
    3. $hashtable[ $r['ARTICULE'] ] = $r['WIDTH'] * $r['HEIGHT'] * $r['DEEP'];
    4. }

    далее проходите по $products и при isset($hashtable[ $product['ARTICULE'] ]) либо с NAME присваиваете значение.


    -----
    PostgreSQL DBA
     
     Top
    LIME
    Отправлено: 10 Сентября, 2020 - 20:42:10
    Post Id


    Активный участник


    Покинул форум
    Сообщений всего: 10732
    Дата рег-ции: Нояб. 2010  


    Помог: 322 раз(а)




    это да, но тогда уж доведем до мержа мб
    WhitePlague массивы отсортированы по артикулу или не факт? можно их получать отсортированными?
     
     Top
    Страниц (1): [1]
    Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
    « Напишите за меня, пожалуйста »


    Все гости форума могут просматривать этот раздел.
    Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
    Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
     



    Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

     
    Powered by ExBB FM 1.0 RC1. InvisionExBB