两个数组之间的差异(抑制和添加的行)

时间:2016-10-25 12:05:38

标签: php mysql arrays

我有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 =&gt;这个解决方案给了我很多线抑制但不是很好的价值。此解决方案不会返回新行。

  • PHP:2个嵌套的foreach(对不起,我不确定嵌套是英文中的好词)

  • MYSQL:使用2 SELECT和1 IN

  • 创建一个mysql查询

我从未找到解决问题的方法。

更清楚,这是一个最简单的解释:

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

在第二个阵列上:

=&GT;第2行被压制了

=&GT;第6行添加

我想用我自己的数组做到这一点。

你有什么想法吗?

致以最诚挚的问候,

弗洛朗。

3 个答案:

答案 0 :(得分: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";
}

等待您的反馈;)

答案 1 :(得分:1)

好吧,这是一个小白痴,我忘了你是为两个数组创建从0到X的行ID(Array_2示例中的红色数字不是023456而是像第一个那样的012345)。 所以我们不能用它来比较线。

我测试了这段代码,看起来很不错:

$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中删除的行并添加到array2中。如果您有2个具有相同值的不同行,则会出现问题...

答案 2 :(得分: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>';

所以现在,我可以打印添加的行和抑制行。

之后我会意识到爆炸会很好; - )

感谢您的帮助。

致以最诚挚的问候,

弗洛朗。