За последние 24 часа нас посетили 22479 программистов и 1010 роботов. Сейчас ищут 634 программиста ...

Сравнение массивов

Тема в разделе "PHP и базы данных", создана пользователем Feonix89, 2 окт 2018.

Метки:
  1. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    Здраствуйте, помогите пожалуйста возникла проблема, не могу справиться со сравнением массивов.
    Первый массив
    Код (Text):
    1. array:1 [▼
    2.   0 => array:9 [▼
    3.     "puchased" => "10"
    4.     "installed" => "182"
    5.     "name_of_software" => "Microsoft Office"
    6.     "software_developer" => "Microsoft"
    7.     "license_type_id" => null
    8.     "need_to_buy" => "-172"
    9.     "display_name" => "Microsoft Office стандартный 2010"
    10.     "product_id" => "Office14.STANDARD"
    11.     "publisher" => "Microsoft Corporation"
    12.   ]
    13. ]
    Второй массив
    Код (Text):
    1. array:241 [▼
    2.   0 => array:4 [▼
    3.     "display_name" => ""
    4.     "product_id" => "{90140000-0012-0000-0000-0000000FF1CE}_Office14.STANDARD_{0420928F-67BC-403A-A767-6D32D8692B13}"
    5.     "publisher" => "Microsoft"
    6.     "number_of_licenses_installed" => "2"
    7.   ]
    Условие такое: Если "display_name", "product_id" и "publisher" равны то у первого массива из "installed" вычесть "number_of_licenses_installed" второго массива.

    Я все время натыкаюсь на ошибку "Array to string conversion".
     
  2. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Не знаю, у меня все вычитается:
    PHP:
    1. $obj1 = ["puchased" =>"10", "installed" =>"182","name_of_software" => "Microsoft Office",
    2. "software_developer" => "Microsoft", "license_type_id" => null, "need_to_buy" => "-172",
    3. "display_name" => "Microsoft Office стандартный 2010", "product_id" => "Office14.STANDARD",
    4. "publisher" => "Microsoft Corporation"];
    5.  
    6. $obj2 = ["display_name" => "", "product_id" => "{90140000-0012-0000-0000-0000000FF1CE}_Office14.STANDARD_{0420928F-67BC-403A-A767-6D32D8692B13}",
    7. "publisher" => "Microsoft", "number_of_licenses_installed" => "2"];
    8.  
    9.  
    10. var_dump($obj1);
    11. echo '<br>';
    12. var_dump($obj2);
    13.  
    14. $math = $obj1['installed'] - $obj2['number_of_licenses_installed'];
    15.  
    16. echo '<br>';
    17. echo $math;
    Условие if покажи свое. Я так понимаю тебе нужно, что было совпадение слова Microsoft, а не всей строки
     
  3. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    У тебя просто массив ключ значение. Это не совсем то.
    В общем интересно посмотреть на Ваши решения я сделал это следующим образом
    PHP:
    1.         /** Вычитаем исключенное программное обеспечение из подсчетов**/
    2.         foreach ($sub3 as &$keyArSub){
    3.             foreach ($excludedSoftware as $keyArEx ){
    4.                 if ($keyArSub->display_name == $keyArEx->display_name
    5.                     && $keyArSub->product_id == $keyArEx->product_id
    6.                     && $keyArSub->publisher == $keyArEx->publisher) {
    7.                         $keyArSub->installed = $keyArSub->installed - $keyArEx->number_of_licenses_installed;
    8.                         $keyArSub->need_to_buy = $keyArSub->need_to_buy + $keyArEx->number_of_licenses_installed;
    9.                 }
    10.             }
    11.         }