Как выполнить проверку двух массивов между собой?

вопросы и ответы по использованию PHP
Ответить
rodjer27
Сообщения: 8
Зарегистрирован: 18 май 2018, 12:38

Как выполнить проверку двух массивов между собой?

Сообщение rodjer27 » 07 июн 2018, 23:21

Здравствуйте, у меня есть два массива, в которых хранятся цвета товаров. Мне нужно сравнить их между собой и узнать каких цветов нет в первом массиве, а каких нет во втором.

Пытался делать перебором массивов в цикле и сравниванием их элементом между собой. Но массив с результатами сверки пустой.

$arr_colors1=array('Синий', 'Чёрный','Фиолетовый','Серый');
$arr_colors2=array('Жёлтый', 'Зелёный','Серый','Красный','Синий');

// цвета в первом которых нет во втором
$arr_res1 = array();
// цвета во втором которых, нет в первом
$arr_res2 = array();

$exists=false;
// пройтись по всему массиву и скачать все файлы
for ($i = 0; $i < count($arr_colors1); $i++)
{
   $color1 = $arr_colors1[$i];
   for ($j = 0; $j < count($arr_colors2); $j++) 
   {
       $color2 = $arr_colors2[$j];  

       if($color1==$color2)
       {
         $exists=true;
         break;
       }
   }   

   if(!$exists)  
     $arr_res1[] = $color1;
}

print_r($arr_res1);

print_r($arr_res2);


rodjer27
Сообщения: 8
Зарегистрирован: 18 май 2018, 12:38

Re: Как выполнить проверку двух массивов между собой?

Сообщение rodjer27 » 08 июн 2018, 14:25

LazyCot писал(а):
08 июн 2018, 09:41
http://php.net/manual/ru/function.array-diff.php
Спасибо!!! Такой код будет попроще. :)

$arr_colors1=array('Синий', 'Чёрный','Фиолетовый','Серый');
$arr_colors2=array('Жёлтый', 'Зелёный','Серый','Красный','Синий');

$arr_res1 = array_diff($arr_colors1,$arr_colors2); 
$arr_res2 = array_diff($arr_colors2, $arr_colors1); 

print_r($arr_res1);
print_r($arr_res2);

Аватара пользователя
xscripts
Сообщения: 80
Зарегистрирован: 24 янв 2012, 12:48
Контактная информация:

Re: Как выполнить проверку двух массивов между собой?

Сообщение xscripts » 08 июн 2018, 15:44

Твой код тоже бы работал если сделать сбрасывание флага $exists=false; в нужном месте
$arr_colors1=array('Синий', 'Чёрный','Фиолетовый','Серый');
$arr_colors2=array('Жёлтый', 'Зелёный','Серый','Красный','Синий');

// цвета в первом которых нет во втором
$arr_res1 = array();
// цвета во втором которых, нет в первом
$arr_res2 = array();

// пройтись по всему массиву и скачать все файлы
for ($i = 0; $i < count($arr_colors1); $i++)
{
   $exists=false;//!!! сбрасывание тут
   $color1 = $arr_colors1[$i];
   for ($j = 0; $j < count($arr_colors2); $j++) 
   {
       $color2 = $arr_colors2[$j];  

       if($color1==$color2)
       {
         $exists=true;
         break;
       }
   }   

   if(!$exists)  
     $arr_res1[] = $color1;
}

print_r($arr_res1);
print_r($arr_res2);

Но конечно самым оптимальным решением для этой задачи является использование array_diff. В php вообще много решений для подобных вещей, поэтому прежде чем писать свой код лучше проверить нет ли уже функции, которая это делает.
http://x-scripts.com/

Код: Выделить всё

<?php
$xhe_host ="127.0.0.1:7010";

require("../Templates/xweb_human_emulator.php");

$browser->navigate("http://x-scripts.com");

$app->quit();?>

rodjer27
Сообщения: 8
Зарегистрирован: 18 май 2018, 12:38

Re: Как выполнить проверку двух массивов между собой?

Сообщение rodjer27 » 08 июн 2018, 15:50

xscripts писал(а):
08 июн 2018, 15:44
В php вообще много решений для подобных вещей, поэтому прежде чем писать свой код лучше проверить нет ли уже функции, которая это делает.
Это я уже понял...

Ответить