2014-04-09 217 views
0

大家好我有2个阵列例如PHP,如下图所示:PHP比较2个阵列阵列

[users] => Array ([0] => Array ([username] => Timothy) [1] => Array ([username] => Frederic)) 

[users2] => Array ([0] => Array ([username] => Johnathon) [1] => Array ([username] => Frederic) [] => Array ([username] => Peter)) 

我想对对方每个阵列的内容,以便把一个html元素比较,我试图用一个嵌套的foreach,如下图所示:

foreach($users as $user){ 
    foreach ($users2 as $user2){ 
     if($user['username'] == $user2['username']){ 
      echo "<option value=' ".$user['username']."' selected = 'selected'>".$user['username']."</option>"; 
      break; 
     } else{ 
      echo "<option value=' ".$user['username']."'>".$user['username']."</option>"; 
     } 
    } 
} 

我的问题是,该项目被呼应不止一次这是毁了我的选择元素更多。关于如何比较每个内容的任何想法?

我要实现每个名称,如列表:

-Timothy 
-Frederic (this should be highlighted as it is in both arrays) 
-Johnathon 
- Peter 
+1

你检查过array_diff(http://us1.php.net/manual/en/function.array-diff.php)吗? – Sablefoste

+0

对于它的1d阵列^ – TotalNewbie

+0

还有[array_udiff](http://www.php.net/manual/en/function.array-udiff.php),它接受用户定义的函数,允许您进行比较你自己。 –

回答

1

我会用不同的方式。

//Create user array one 
$users = array(); 
$users[] = array('username'=>'Timothy'); 
$users[] = array('username'=>'Frederic'); 

//create user array 2 
$users2 = array(); 
$users2[] = array('username'=>'Johnathon'); 
$users2[] = array('username'=>'Frederic'); 
$users2[] = array('username'=>'Peter'); 

$temp_array = array(); 

foreach($users as $key => $value) { 
    $temp_array[$value['username']] = ''; 
} 

foreach($users2 as $key => $value) { 
    $temp_array[$value['username']] = array_key_exists($value['username'], $temp_array) ? 'DUPLICATE' : null; 
} 

echo '<select>'; 
foreach($temp_array as $key_value => $status) { 
    echo "<option value='{$key_value}' ".(($status == 'DUPLICATE') ? 'selected style="background-color: yellow;"' : '').">{$key_value}</option>"; 
} 
echo '</select>'; 

我会让数组照顾它自己,如果它共享相同的键,它会合并,然后用“重复”标记它。

1

如果你每个阵列中说,对我下面的作品从未有任何重复。这看起来有点复杂,但请仔细阅读我的评论。

您可以复制代码并在其自己的页面中运行它,以查看它是否按照您想要的方式工作。

<?php 
//Create user array one 
$users = array(); 
$users[] = array('username'=>'Timothy'); 
$users[] = array('username'=>'Frederic'); 

//create user array 2 
$users2 = array(); 
$users2[] = array('username'=>'Johnathon'); 
$users2[] = array('username'=>'Frederic'); 
$users2[] = array('username'=>'Peter'); 

//create a new array to combine all of the data, yes, there will be duplicates 
$allData = array(); 

//add to allData array 
foreach ($users as $user) { 
    $allData[] = $user['username']; 
} 

//add to allData array 
foreach ($users2 as $user2) { 
    $allData[] = $user2['username']; 
} 

//create an array that will hold all of the duplicates 
$dups = array(); 

//add any duplicates to the array 
foreach(array_count_values($allData) as $val => $c) { 
    if($c > 1) $dups[] = $val; 
} 

//remove the duplicates from the allData array 
$allData = array_unique($allData); 

//echo out form 
echo '<select>'; 
foreach ($allData as $user) { 
    if (in_array($user, $dups)) { 
     echo "<option value=' ".$user."' selected = 'selected'>".$user."</option>"; 
    } 
    else { 
     echo "<option value=' ".$user."'>".$user."</option>"; 
    } 
} 
echo '</select>'; 
?> 

但是,我不知道你的意图是什么,因为如果用户在阵列中有“彼得”和“弗雷德里克”,你不会得到你想要的形式。但是,这适用于你想要的。

+0

心理障碍看起来有点令人生畏,但我会给你的代码去感谢 – TotalNewbie