0

2つの配列で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] =>配列([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[ステータス]=>重複))

    $ Total_val = Array([0] => Array([url] => http://www.cheapohotels.co.uk/resources/index_car_hire.html [ip] => 77.92.74.100 [status] => Unique)[ 1] =>配列([url] => http://www.holidayparkfinder.co.uk/resources/index_car_hire.html [ip] => 213.171.218.208[ステータス]=>一意)[2] =>配列( [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 [ステータス]=>一意)[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[ステータス]=>一意))
echo <pre>'; print_r($duplicates); echo '</pre>';

上記の配列では、値(DuplicateおよびUnique)があります。プログラムのデフォルトでは、$ Total_valが保存され、値に一意のステータスが示されます。ただし、これらの配列には一意の値がありません。一意の値を取得するには、$duplicatesから減算する必要があります。そして、phpでも同じことをしているので、正確な値は得られません...他の値ではなくIPで減算します。この背後にある主な理由。=のような一意のIPを使用して新しい配列を作成する必要があります

    $ new_array = array_diff($ Total_val、$ duplicates);
    //この関数の出力は
      配列 ( ) ; //空白の結果を表示します。
    $ new_array = array_diff_assoc($ array1、$ dup);
    //結果をエコーすると、出力は次のようになります

    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 ] =>一意)[11] =>配列([url] => http://www.mobiz.co.uk/resources/index_recreation_autos.html [ip] => 77.92.74.100[ステータス]=>一意)[ 12] =>配列([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()」からの最終出力を確認できます。ただし、正確な値は表示されません。あなたがIP77.92.74.100を見ることができるように。それは3回繰り返され、それでも独特の状態にあります。

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、2つの値の同等性をどのように決定するかです。

:2つの要素は、。の場合にのみ等しいと見なされ(string) $elem1 === (string) $elem2ます。つまり、文字列表現が同じ場合。

ここでの問題は、配列を文字列に変換すると常に次のようになること"Array"です。

配列は常に文字列「Array」に変換されます。[…]

したがって、最初の配列のすべての配列値は、他の配列の他の配列値の複製と見なされます。また、対称差array_diffを返さないが、A \ B(つまり、 AからBを引いたもの)であり、AにはBよりも多くの要素があるため、最初の7つの項目が戻ってこないだけです。$Total_val

正しい結果を得るには、各アイテムの文字列表現を比較する以外に、別の比較関数を使用する必要がありますarray_diffarray_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 に答える