13

次の変数$rowsがあります。

配列 (

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

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

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

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

)。

一意の値のみを含む2番目の配列$secondを作成する必要があります。

配列 (

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

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

)。

しかし、$ rowsでarray_uniqueを実行すると、次のようになります。

キャッチ可能な致命的なエラー:クラスstdClassのオブジェクトを191行目の文字列に変換できませんでした

4

4 に答える 4

25

array_unique()

オプションの2番目のパラメーターsort_flagsを使用して、次の値を使用して並べ替えの動作を変更できます。

タイプフラグの並べ替え:

  • SORT_REGULAR-アイテムを通常どおりに比較します(タイプを変更しないでください)
  • SORT_NUMERIC-アイテムを数値で比較します
  • SORT_STRING-アイテムを文字列として比較します
  • SORT_LOCALE_STRING-現在のロケールに基づいて、アイテムを文字列として比較します。

以下の変更点にも注意してください

5.2.10sort_flags のデフォルト値をSORT_STRINGに戻しました。

5.2.9デフォルトでSORT_REGULAR に設定されているオプションのsort_flagsを追加しました。5.2.9より前では、この関数はSORT_STRINGを使用して配列を内部的にソートするために使用されていました。

$values = array_unique($values, SORT_REGULAR);
于 2012-07-05T08:26:42.223 に答える
10
$uniques = array();
foreach ($array as $obj) {
    $uniques[$obj->product_sku] = $obj;
}

var_dump($uniques);
于 2012-07-05T08:25:32.540 に答える
5

関数のデフォルトの動作は、array_unique()最初に内部の値を文字列として扱うことです。つまり、PHPがオブジェクトを文字列に変換しようとしている(エラーがスローされている)ということです。

次のように関数呼び出しを変更できます。

$uniqueArray = array_unique($rows, SORT_REGULAR);

これにより、データ型を変更せずに値が比較されます。

于 2012-07-05T08:27:06.477 に答える
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;
}
于 2015-07-10T06:50:35.847 に答える