web-dev-qa-db-ja.com

この配列から一意の配列値のみを選択します

次の変数$ 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

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

var_dump($uniques);
10
deceze

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);
25
KingCrunch

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

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

$uniqueArray = array_unique($rows, SORT_REGULAR);

これは、データ型を変更せずに値を比較します。

5
Stegrex

以下のコードを確認してください。これがあなたのお役に立てば幸いです。

$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;
}
0
Raju Dudhrejiya