2012-07-05 36 views
12

我有以下變量$行:從這個數組只選擇唯一的數組值

陣列(

[0] => stdClass Object 
    (
     [product_sku] => PCH20 
    ) 

[1] => stdClass Object 
    (
     [product_sku] => PCH20 
    ) 

[2] => stdClass Object 
    (
     [product_sku] => PCH19 
    ) 

[3] => stdClass Object 
    (
     [product_sku] => PCH19 
    ) 

我需要第二創建第二陣列$含唯一值:

陣列(

[0] => stdClass Object 
    (
     [product_sku] => PCH20 
    ) 

[1] => stdClass Object 
    (
     [product_sku] => PCH19 
    ) 

但是,當我在$運行array_unique行,我得到:

捕獲的致命錯誤:類對象stdClass已經不能 轉換在線上串起

+3

默認情況下,PHP將嘗試值轉換爲字符串進行比較。嘗試指定 「默認」:'$結果= array_unique($陣列,SORT_REGULAR);' –

回答

10
$uniques = array(); 
foreach ($array as $obj) { 
    $uniques[$obj->product_sku] = $obj; 
} 

var_dump($uniques); 
24

array_unique()

可選的第二個參數sort_flags改變可以使用利用這些值來修改排序行爲:

排序類型標識:

  • SORT_REGULAR - 通常比較(不要更改類型)
  • SORT_NUMERIC - 比較項目nu經濟
  • SORT_STRING - 比較項目作爲字符串
  • SORT_LOCALE_STRING - 比較項目作爲字符串,基於當前的區域設置。

還要注意改變sort_flags改變的默認值回SORT_STRING下面

5.2.10的changenotes。

5.2.9添加了可選的sort_flags默認爲SORT_REGULAR。在5.2.9之前,此函數用於在內部對SORT_STRING進行排序。

$values = array_unique($values, SORT_REGULAR); 
+4

這應該是公認的答案。 –

+0

它不應該被接受的答案。這個問題說'但是當我在$行上運行array_unique時,我收到:'這個問題沒有解決。 – Whitecat

+0

@Whitecat'SORT_STRING'(默認),試圖將值轉換爲字符串,之前在比較值而這也正是錯誤的來源。見https://3v4l.org/DeHIj這就是手工摘錄嘗試告訴你 – KingCrunch

3

的功能array_unique()的默認行爲是爲字符串的第一個內部處理的值。所以發生的事情是PHP試圖將你的對象轉換爲字符串(這是拋出錯誤)。

您可以修改你的函數調用是這樣的:

$uniqueArray = array_unique($rows, SORT_REGULAR); 

這將比較值不改變它們的數據類型。

+0

非常好:把我的評論和張貼作爲自己的答案... –

+0

對不起,我只是在這個過程中寫它的...:/ – Stegrex

+4

此功能不多維數組工作 – mahen3d

0

請檢查下面的代碼,我希望這將有助於你。

$resultArray = uniqueAssocArray($actualArray, 'product_sku'); 

function uniqueAssocArray($array, $uniqueKey) 
{ 
    if (!is_array($array)) 
    { 
    return array(); 
    } 
    $uniqueKeys = array(); 
    foreach ($array as $key => $item) 
    { 
    $groupBy=$item[$uniqueKey]; 
    if (isset($uniqueKeys[$groupBy])) 
    { 
     //compare $item with $uniqueKeys[$groupBy] and decide if you 
     //want to use the new item 
     $replace= false; 
    } 
    else 
    { 
     $replace=true; 
    } 
    if ($replace) 
     $uniqueKeys[$groupBy] = $item; 
} 
return $uniqueKeys; 
}