2016-10-25 4 views
1

У меня 2 PHP массивы:Разница между двумя массивами (подавленных и добавленных линий)

Первый:

<?php 
    while ($res_liste_risks_last_update_moins_un = mysql_fetch_array($sql_liste_risks_last_update_moins_un)) { 
     $myTAB_last_update_moins_un[$compteur_risk_moins_un] = array(
      'MyRisk_level_xls' => $res_liste_risks_last_update_moins_un['MyRisk_level_xls'], 
      'MyRisk_SN_xls' => $res_liste_risks_last_update_moins_un['MyRisk_SN_xls'], 
      'MyRisk_content_xls' => $res_liste_risks_last_update_moins_un['MyRisk_content_xls'] 
     ); 

     $compteur_risk_moins_un++; 
    } 

Вторая:

<?php 
    while ($res_liste_risks_last_update = mysql_fetch_array($sql_liste_risks_last_update)) { 
     $myTAB_last_update[$compteur_risk] = array(
      'MyRisk_level_xls' => $res_liste_risks_last_update['MyRisk_level_xls'], 
      'MyRisk_SN_xls' => $res_liste_risks_last_update['MyRisk_SN_xls'], 
      'MyRisk_content_xls' => $res_liste_risks_last_update['MyRisk_content_xls'] 
     ); 

     $compteur_risk++; 
    } 

Структура этого 2 массивов тоже самое.

Для получения информации, я заполняю эти 2 массива двумя запросами mysql. Данные присутствуют в одной таблице.

я хотел бы получить разницу между этим 2 массивов:

  • Новая линия присутствует на втором массиве (myTAB_last_update) (в отношении стоимости, присутствующего на первом массиве $ myTAB_last_update_moins_un)

  • подавлена ​​линия (не более присутствует) на втором массиве (myTAB_last_update) (в отношении значения, присутствующего на первый массив $ myTAB_last_update_moins_un)

Я попробовал несколько метод, как:

  • PHP: array_diff_assoc => Это решение дает мне хороший номер строки подавленного, но не хорошее значение. И это решение не возвращает новую строку.

  • PHP: 2 вложенная Еогеасп (жаль, что я не уверен, что вложенные это хорошее слово на английском языке)

  • MYSQL: создать MySQL запрос с 2 ВЫБРАТЬ и 1

Я никогда не нашел решения моей проблемы.

Чтобы быть более ясным, здесь проще всего объяснение:

array_1:

0 value1 value2 
1 value1 value2 
2 value1 value2 
3 value1 value2 
4 value1 value2 
5 value1 value2 

array_2:

0 value1 value2 
2 value1 value2 
3 value1 value2 
4 value1 value2 
5 value1 value2 
6 value1 value2 

На втором массиве:

=> линия 2 была подавлено

=> была добавлена ​​линия 6

Я хочу сделать это с помощью своих собственных массивов.

У вас есть идеи?

С уважением,

Florent.

+0

Здравствуйте, Извините, но моя первая строка «Hello all» была удалена из моего сообщения. –

ответ

2

Что это?

$added = array_diff_key($new, $old); 
$deleted = array_diff_key($old, $new); 

foreach(array_keys($added) as $no_row){ 
    echo "Line ".$no_row." added"; 
} 
foreach(array_keys($deleted) as $no_row){ 
    echo "Line ".$no_row." deleted"; 
} 

Ожидают свой отзыв;)

+0

«Привет» тоже удалено –

+0

Привет. Спасибо за ваш ответ. Я проведу ваш метод сегодня вечером. Я буду информировать вас как можно скорее. –

+0

Здравствуйте, я просто проверю ваш метод. –

1

Хорошо это было немного идиот, я забыл, что ты создавал строк ID от 0 до X для дважды массивов (красный номер на вашем array_2 примере не 023456 но, как и первый). Поэтому мы не можем использовать его для сравнения строк.

Я проверить этот код, и это, кажется, хорошо:

$added = array_diff($tab2, $tab); 
$deleted = array_diff($tab, $tab2); 
foreach(array_keys($added) as $no_row){ 
    echo "Line ".($no_row+1)." added<br>"; 
} 
foreach(array_keys($deleted) as $no_row){ 
    echo "Line ".($no_row+1)." deleted<br>"; 
} 

Он напечатать строку удален в array1 и добавляемые в массив2. Проблема будет, если у вас есть 2 разных строки с одинаковыми значениями ...

+1

Благодарим за обновление. Я буду тестировать через 1 минуту, и я дам вам обновление. –

+0

Привет. Ваше решение не работает для меня. Но я нашел решение сделать то, что хочу. Это не очень хорошее решение, но это работа. Я добавлю новый ответ со всеми подробностями. –

1

Итак, я нашел решение для своей проблемы. Возможно, это не условный путь, но он работает.

Так что вы можете найти ниже объяснение: - Изменить мои 2 массивы с конкатенации

while($res_liste_risks_last_update_moins_un = mysql_fetch_array($sql_liste_risks_last_update_moins_un)) 
{ 
    $chaine_update_moins_un = $res_liste_risks_last_update_moins_un['MyRisk_level_xls'] . '__' . $res_liste_risks_last_update_moins_un['MyRisk_SN_xls'] . '__' . $res_liste_risks_last_update_moins_un['MyRisk_content_xls']; 

    $myTAB_last_update_moins_un[$compteur_risk_moins_un] = $chaine_update_moins_un; 
    $compteur_risk_moins_un++;  
} 


while($res_liste_risks_last_update = mysql_fetch_array($sql_liste_risks_last_update)) 
{ 
    $chaine_update = $res_liste_risks_last_update['MyRisk_level_xls'] . '__' . $res_liste_risks_last_update['MyRisk_SN_xls'] . '__' . $res_liste_risks_last_update['MyRisk_content_xls']; 

    $myTAB_last_update[$compteur_risk] = $chaine_update; 
    $compteur_risk++;   
} 

Тогда:

$added = array_diff($myTAB_last_update, $myTAB_last_update_moins_un); 

echo '<pre>'; 
print_r($added); 
echo '</pre>'; 




$deleted = array_diff($myTAB_last_update_moins_un, $myTAB_last_update); 

echo '<pre>'; 
print_r($deleted); 
echo '</pre>'; 

Так что теперь я могу печатать добавлены линии и линии подавляются ,

После того, что я буду реализовать взрываются, и это будет хорошо ;-)

Спасибо за вашу помощь.

С уважением,

Florent.

+0

А я думаю, что array_diff не может сравниться, когда value является массивом. WP! –

Смежные вопросы