2013-08-06 64 views
0

我正在嘗試處理從動態API中獲取的這些數據。我知道id將永遠是唯一的,但name經常會彼此匹配,這是一個問題。使用PHP,我將如何刪除任何stdClass對象,其name與此數組中的前一個對象的name值相同?我確實希望檢查從0進展到最高值,因爲這些stdClass對象中有其他數據。在這種情況下,我想1被刪除,因爲它的名字匹配0的名字,但之後什麼是2應該成爲新的1,原因很明顯。在stdClass對象數組中刪除具有重複值的對象

Array 
(
    [0] => stdClass Object 
     (
      [id] => 6969 
      [name] => Steve Jobs 
     ) 
    [1] => stdClass Object 
     (
      [id] => 2013 
      [name] => Steve Jobs 
     ) 
    [2] => stdClass Object 
     (
      [id] => 1234 
      [name] => The Woz 
     ) 
) 

謝謝!

+0

的[選擇從該陣列只獨特數組值]可能重複(http://stackoverflow.com/questions/11340450/select-only-unique-array-values-from-this- array) – ops

回答

2

你可以做這樣的事情:

$newArray = array(); 

foreach ($array as $value) { $newArray[$value->name] = $value; } 

通過該週期結束時,您將有一個數組,其中每一個名字只能滿足一次(你會記住這名最新發生)。

4

你可以使用array_filter做到這一點:

$objects = array(
    (object)array('id' => 1, 'name' => 'test1'), 
    (object)array('id' => 2, 'name' => 'test2'), 
    (object)array('id' => 3, 'name' => 'test1'), 
); 
$known = array(); 
$filtered = array_filter($objects, function ($val) use (&$known) { 
    $unique = !in_array($val->name, $known); 
    $known[] = $val->name; 
    return $unique; 
}); 

退房this fiddle

+0

謝謝,這看起來好像可能比@ mkdotam的回答更好?我會試一試,並確認它是正確的,當我確定它的工作:) – tylerl

+0

我不會說這是更好的定義,每種方法都有其優點和缺點。 – NDM

+0

兩件事:首先,爲什麼每個stdClass對象內都有一個數組?我仍然是一個新手,但AFAIK我的示例輸出只是正常的stdClass對象內的數組......其次,我應該輸出哪個數組? '$ filtered'?因爲那不起作用,'$ known'和'$ objects'都沒有......並且第2-4行沒有終止左括號...... – tylerl