我一直在努力思考是否有一種更簡單的方法可以從陣列中獲取唯一物件,但是找不到任何檔案或確認存在任何可以滿足我要求的東西。
我有一個回傳以下內容的 API:
Array
(
[0] => stdClass Object
(
[Name] => Kory Kelly
[PhoneNumber] => (555) 555-5555
[EmailAddress] => [email protected]
)
[1] => stdClass Object
(
[Name] => Kory Kelly
[PhoneNumber] => (555) 555-5555
[EmailAddress] => [email protected]
)
)
現在顯然我不能使用array_unique——因為它會根據陣列鍵檢查實際值——我已經構建了一個遞回函式來拆分物件,重建為陣列并在重建IE期間手動進行檢查
if ( $arr['Name'] === $passed_arr['Name']
&& $arr['PhoneNumber'] === $passed_arr['PhoneNumber']
&& $arr['EmailAddress'] === $passed_arr['EmailAddress'] )
這行得通..但它似乎有點啰嗦。是否有內置/更有效的方法?我覺得我正在用我目前的方法重新發明輪子。
uj5u.com熱心網友回復:
如果使用物件的 JSON 字串作為鍵,這也可以通過簡單的 foreach 回圈來實作。
$arr = [
(object)['Name' => 'Kory Kelly', 'PhoneNumber' => '(555) 555-5555'],
(object)['Name' => 'Kory Kelly', 'PhoneNumber' => '(555) 555-5555'],
(object)['Name' => 'Kory Kelly', 'PhoneNumber' => '(555) 555-5555X'], //different
];
foreach($arr as $key => $object){
$arr[json_encode($object)] = $object;
unset($arr[$key]);
}
$arr = array_values($arr);
var_dump($arr);
在3v4l.org上親自嘗試。
與 array_unique($arr, SORT_REGULAR ) 相比,這種方法只有在物件比較中只考慮某些鍵時才會變得有趣。
uj5u.com熱心網友回復:
如果您不想檢查資料型別,則可以array_unique()將標志SORT_REGULAR與唯一物件一起使用
$list = json_decode('[{
"name": "Ahmed",
"phone": "(555) 555-5555",
"email" : "[email protected]"
},
{
"name": "Ahmed",
"phone": "(555) 555-5555",
"email" : "[email protected]"
},
{
"name": "Ahmed",
"phone": "(555) 555-5555",
"email" : "[email protected]"
}
]');
$uniqueList = array_unique($list, SORT_REGULAR );
結果應該是
array(2) {
[0]=>
object(stdClass)#1047 (3) {
["name"]=>
string(5) "Ahmed"
["phone"]=>
string(14) "(555) 555-5555"
["email"]=>
string(13) "[email protected]"
}
[2]=>
object(stdClass)#1045 (3) {
["name"]=>
string(5) "Ahmed"
["phone"]=>
string(14) "(555) 555-5555"
["email"]=>
string(14) "[email protected]"
}
}
我希望它有用
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/455819.html
