PHP Array Слияние и различие в соответствии со значениями - PullRequest
0 голосов
/ 20 июля 2011

Мы хотели бы знать, как мы можем использовать array_diff () в двух массивах. Пожалуйста, посмотрите ниже.


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

    $Total_val =  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 ) ) 
<code>echo <pre>'; print_r($duplicates); echo '
';

В приведенных выше массивах, имеющих значения (Duplicate и Unique). по умолчанию $ Total_val хранится и упоминается уникальный статус в значениях. но эти массивы не имеют уникальных значений, чтобы получить уникальные значения, мы должны вычесть из $ дубликатов. И мы делаем то же самое в php, мы не получаем точные значения ... вычитая по IP, а не для других значений. Основная причина этого. мы должны создать новый массив с уникальными IP-адресами вроде =


    $new_array = array_diff($Total_val, $duplicates);
    //the output for this function is
      Array ( ) ;  // showing Blank Result.
    $new_array = array_diff_assoc($array1, $dup);
    //echo result, then the output is 

    Array ( [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 ) ) 

Вы можете проверить окончательный вывод этой функции "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 доступен, то статус будет дубликат. так же, как для уникальных.

Пожалуйста, дайте мне предложение для этой программы.

Спасибо

ROD

1 Ответ

1 голос
/ 20 июля 2011

Проблема в том, как array_diff определяет равенство двух значений:

Примечание : два элемента считаются равными тогда и только тогда, когда (string) $elem1 === (string) $elem2.На словах: когда строковое представление одинаково.

Проблема здесь в том, что преобразование массивов в строку всегда дает "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 .

...