0

我们想知道,我们如何在两个数组中使用 array_diff()。请看下面。

    $duplicates= 数组([0] => 数组([url] => http://www.cheapohotels.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => 重复)[ 1] => 数组([url] => http://www.villasinprovence.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => 重复)[2] => 数组( [url] => http://www.mobiz.co.uk/resources/index_recreation_autos.html [ip] => 77.92.74.100 [status] => 重复)[3] => 数组([url] => http ://www.holidaysoffersuk.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [状态] => 重复)[4] => 数组([url] => http://www.ticketsforsaleuk .co.uk/resources/index_companies_automotive.html [ip] => 77.92.74.100 [status] => 重复)[5] => 数组([url] => http://www.holidayparkfinder.co.uk/resources /index_car_hire。html [ip] => 213.171.218.208 [status] => 重复)[6] => 数组([url] => http://www.themeparkhotels.co.uk/resources/index_car_hire.html [ip] => 213.171.218.10 [状态] => 重复 ) )

    $Total_val = 数组([0] => 数组([url] => http://www.cheapohotels.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => 唯一)[ 1] => 数组([url] => http://www.holidayparkfinder.co.uk/resources/index_car_hire.html [ip] => 213.171.218.208 [status] => 唯一)[2] => 数组( [url] => http://www.themeparkhotels.co.uk/resources/index_car_hire.html [ip] => 213.171.218.10 [status] => 唯一)[3] => 数组([url] => http ://www.villasinprovence.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => Unique ) [4] => Array ([url] => http://usedmotorcycleaccessories.com /resources/ [ip] => 174.37.15.56 [status] => Unique ) [5] => Array ([url] => http://aftermarket-motorcycleparts.com/resources/ [ip] => 50.23.134.232 [状态] => 独特的) [6] =>数组([url] => http://cheaponlinemotorcycleparts.com/resources/ [ip] => 173.192.128.240 [status] => 唯一)[7] => 数组([url] => http://usedcaronlinereviews。 com/resources/ [ip] => 50.23.153.112 [status] => 唯一)[8] => 数组([url] => http://cartransportationreviews.com/resources/ [ip] => 50.23.132.48 [ status] => Unique ) [9] => Array ( [url] => http://vehicleaccidentinsurancequotes.com/ [ip] => 65.75.176.111 [status] => Unique ) [10] => Array ( [url ] => http://www.netbizcorp.com/linkmachine/resources/resources_recreation_autos.html [ip] => 74.209.213.8 [status] => 唯一) [11] => 数组 ([url] => http:// /www.mobiz.co.uk/resources/index_recreation_autos.html [ip] => 77.92.74.100 [status] => 唯一)[12] => 数组([url] => http://www.holidaysoffersuk.co .uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => 唯一)[13] => 数组([url] => http://www.ticketsforsaleuk.co.uk/resources/index_companies_automotive。 html [ip] => 77.92.74.100 [status] => 唯一 ) )
echo <pre>'; print_r($duplicates); echo '</pre>';

在上述数组中,具有值(重复和唯一)。通过程序默认 $Total_val 存储并在值中提及唯一状态。但是这些数组没有唯一值,要获得唯一值,我们必须从 $duplicates 中减去。我们在 php 中做同样的事情,我们没有得到确切的值……减去 IP 不是其他值。这背后的主要原因。我们必须创建一个具有唯一 IP 的新数组,例如 =

    $new_array = array_diff($Total_val, $duplicates);
    //这个函数的输出是
      大批 ( ) ; // 显示空白结果。
    $new_array = array_diff_assoc($array1, $dup);
    //回显结果,则输出为

    数组([7] => 数组([url] => http://usedcaronlinereviews.com/resources/ [ip] => 50.23.153.112 [status] => 唯一)[8] => 数组([url] = > http://cartransportationreviews.com/resources/ [ip] => 50.23.132.48 [status] => 唯一)[9] => 数组([url] => http://vehicleaccidentinsurancequotes.com/ [ip] = > 65.75.176.111 [状态] => 唯一)[10] => 数组([url] => http://www.netbizcorp.com/linkmachine/resources/resources_recreation_autos.html [ip] => 74.209.213.8 [状态] => 唯一)[11] => 数组([url] => http://www.mobiz.co.uk/resources/index_recreation_autos.html [ip] => 77.92.74.100 [status] => 唯一)[ 12] => 数组([url] => http://www.holidaysoffersuk.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => 唯一)[13] => 数组( [网址] => http://www.ticketsforsaleuk.co.uk/resources/index_companies_automotive.html [ip] => 77.92.74.100 [status] => Unique ) )

您可以检查此函数 "array_diff_assoc()" 的最终输出,它的工作原理。但它没有显示确切的值。就像你可以看到 IP 77.92.74.100 一样。它重复了三遍,仍然处于独特的地位。

Array ( [0] => Array ( [url] => http://www.cheapohotels.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => Unique ) [1] => Array ( [url] => http://www.holidayparkfinder.co.uk/resources/index_car_hire.html [ip] => 213.171.218.208 [status] => Unique ) [2] => Array ( [url] => http://www.themeparkhotels.co.uk/resources/index_car_hire.html [ip] => 213.171.218.10 [status] => Unique ) [3] => Array ( [url] => http://www.villasinprovence.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => Unique ) [4] => Array ( [url] => http://usedmotorcycleaccessories.com/resources/ [ip] => 174.37.15.56 [status] => Unique ) [5] => Array ( [url] => http://aftermarket-motorcycleparts.com/resources/ [ip] => 50.23.134.232 [status] => Unique ) [6] => Array ( [url] => http://cheaponlinemotorcycleparts.com/resources/ [ip] => 173.192.128.240 [status] => Unique ) [7] => Array ( [url] => http://usedcaronlinereviews.com/resources/ [ip] => 50.23.153.112 [status] => Unique ) [8] => Array ( [url] => http://cartransportationreviews.com/resources/ [ip] => 50.23.132.48 [status] => Unique ) [9] => Array ( [url] => http://vehicleaccidentinsurancequotes.com/ [ip] => 65.75.176.111 [status] => Unique ) [10] => Array ( [url] => http://www.netbizcorp.com/linkmachine/resources/resources_recreation_autos.html [ip] => 74.209.213.8 [status] => Unique ) [11] => Array ( [url] => http://www.mobiz.co.uk/resources/index_recreation_autos.html [ip] => 77.92.74.100 [status] => Unique ) [12] => Array ( [url] => http://www.holidaysoffersuk.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => Unique ) [13] => Array ( [url] => http://www.ticketsforsaleuk.co.uk/resources/index_companies_automotive.html [ip] => 77.92.74.100 [status] => Unique ) )

当我尝试这个功能时给我这个

function cmp($a, $b) {
return strcmp($a['status'], $b['status']);
}
$diff = array_udiff($array1, $dup, 'cmp');

状态保持不变“对所有价值观来说都是独一无二的”,我只想相应地提及。就像如果重复的 ip 可用,那么状态将是重复的。与唯一相同。

请给我这个程序的建议。

谢谢

竿

4

1 回答 1

1

问题是如何array_diff确定两个值的相等性:

注意:两个元素被认为相等当且仅当(string) $elem1 === (string) $elem2。换句话说:当字符串表示相同时。

这里的问题是将数组转换为字符串总是产生"Array"

数组总是转换为字符串“Array”;[…]

因此,第一个数组中的每个数组值都被视为另一个数组的任何其他数组值的副本。并且由于array_diff不返回对称差异A \ B(即A减去B)并且A 的元素比B多,所以您只是$Total_val没有返回前七个项目。

现在要获得正确的结果,您需要使用不同的比较函数,而不是像这样比较每个项目的字符串表示array_diff。您可以使用array_udiff来执行此操作:

function cmpByIp($a, $b) {
    return strcmp($a['ip'], $b['ip']);
}
$diff = array_udiff($Total_val, $duplicates, 'cmpByIp');

这仅通过ip比较您的数组项。

于 2011-07-20T05:54:42.693 回答