我有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
我从未找到解决问题的方法。
更清楚,这是一个最简单的解释:
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行添加
我想用我自己的数组做到这一点。
你有什么想法吗?
致以最诚挚的问候,
弗洛朗。
答案 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>';
所以现在,我可以打印添加的行和抑制行。
之后我会意识到爆炸会很好; - )
感谢您的帮助。
致以最诚挚的问候,
弗洛朗。