2012-07-05 17 views
12

tengo los siguientes $ filas variables:Seleccionar valores de matriz única únicas de esta serie

matriz (

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

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

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

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

)

Necesito crear segunda matriz $ segundo que contiene solo valores únicos:

Matriz (

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

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

)

Pero cuando corro array_unique en $ filas, recibo:

error grave capturable: Objeto de la clase stdClass no se pudo convertidos para encadenar en línea

+3

De forma predeterminada, PHP intentará convertir valores en cadenas para comparar. Intente especificar "predeterminado": '$ result = array_unique ($ array, SORT_REGULAR);' –

Respuesta

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

var_dump($uniques); 
24

array_unique()

Los sort_flags opcionales segundo parámetro se puede utilizar para modificar el comportamiento de ordenación usando estos valores:

Clasificación banderas Tipo:

  • SORT_REGULAR - Comparar artículos normalmente (no cambie los tipos)
  • SORT_NUMERIC - comparar artículos nu merically
  • SORT_STRING - comparar elementos como cadenas
  • SORT_LOCALE_STRING - comparar elementos como cadenas, según la configuración regional actual.

Tenga en cuenta también las siguientes changenotes

5.2.10 cambiado el valor por defecto de nuevo a sort_flags SORT_STRING.

5.2.9 Se agregó el opcional sort_flags predeterminado a SORT_REGULAR. Antes de la 5.2.9, esta función solía ordenar la matriz con SORT_STRING internamente.

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

Esto debería aceptarse como respuesta. –

+0

No debería ser la respuesta aceptada. La pregunta dice 'Pero cuando ejecuto array_unique en $ rows, recibo:' que esta pregunta no aborda. – Whitecat

+0

@Whitecat 'SORT_STRING' (valor predeterminado) intenta convertir los valores en una cadena, antes de comparar los valores y de ahí proviene el error. Ver https://3v4l.org/DeHIj Eso es lo que los extractos del manual intentan decirle – KingCrunch

3

El comportamiento por defecto de la función array_unique() es para el tratamiento de los valores en el interior como cadenas en primer lugar. Entonces, lo que está sucediendo es que PHP está intentando convertir tus objetos en cadenas (lo que está generando el error).

Puede modificar su llamada función como esta:

$uniqueArray = array_unique($rows, SORT_REGULAR); 

Esto comparar los valores sin cambiar su tipo de datos.

+0

Muy bien: toma mi comentario y publícalo como tu propia respuesta ... –

+0

Lo siento, estaba en el proceso de escribirlo ...:/ – Stegrex

+4

esta función no funciona en matrices multidimensionales – mahen3d

0

Por favor, compruebe el código a continuación, espero que esto sea útil para usted.

$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; 
} 
Cuestiones relacionadas