PHP - 使用第一个数组中的所有内容,从第二个数组中删除重复项?

时间:2013-06-21 18:30:51

标签: php arrays

我有2个数组 - 第一个是完全输出。第二个可能有一些已经使用/输出第一个数组的值。我想“清理”第二个数组,以便我可以输出其数据而不必担心显示重复数据。只是为了确保我有正确的术语和没有某种“阵列中的数组”,这就是我访问每一个的方法:

第一阵列

$firstResponse = $sth->fetchAll();
foreach ($firstResponse as $firstResponseItem) {
    echo $firstResponseItem['samecolumnname']; // Don't care if it's in 2nd array
}

第二阵列

while( $secondResponseRow = $dbRequest->fetch_assoc() ){
    $secondResponseArray = array($secondResponseRow);
    foreach ($secondResponseArray as $secondResponseItem){
        echo $secondResponseItem['samecolumnname']; //This can't match anything above
    }
}

谢谢!

3 个答案:

答案 0 :(得分:1)

例如:

$response_names = array();
$firstResponse = $sth->fetchAll();
foreach ($firstResponse as $firstResponseItem)
    $response_names[] = $firstResponseItem['samecolumnname'];

while( $secondResponseRow = $dbRequest->fetch_assoc() ){
    $secondResponseArray = array($secondResponseRow);
    foreach ($secondResponseArray as $secondResponseItem) {
        if (!in_array($secondResponseItem['samecolumnname'], $response_names))
            $response_names[] = $secondResponseItem['samecolumnname'];
    }
}

array_walk($response_names, function($value) { echo $value . '<br />' });

答案 1 :(得分:0)

如果我理解你要做的事情并且数组在同一范围内,那么这应该可行。

$secondResponseArray = array($secondResponseRow);
$secondResponseArray = array_diff($secondResponseArray, $firstResponse); 
//secondResponseArray now contains only unique items
foreach ($secondResponseArray as $secondResponseItem){
    echo $secondResponseItem['samecolumnname'];
}

答案 2 :(得分:0)

如果您知道重复值的键是相同的,则可以使用array_diff_assoc来获取第一个数组中不在其他提供的数组中的项。

此代码

<?php
$a = array('abc', 'def', 'ghi', 'adg');
$b = array('abc', 'hfs', 'toast', 'adgi');
$r = array_diff_assoc($b, $a);

print_r($a);
print_r($r);

产生以下输出

[kernel@~]php so_1.php 
Array
(
    [0] => abc
    [1] => def
    [2] => ghi
    [3] => adg
)
Array
(
    [1] => hfs
    [2] => toast
    [3] => adgi
)
[kernel@~]