从此数组中仅选择唯一的数组值

Rhy*_*Guy 13 php arrays array-unique

我有以下变量$ 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
    )
Run Code Online (Sandbox Code Playgroud)

)

我需要创建仅包含唯一值的第二个数组$ second:

阵列(

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

[1] => stdClass Object
    (
        [product_sku] => PCH19
    )
Run Code Online (Sandbox Code Playgroud)

)

但是当我在$ rows上运行array_unique时,我会收到:

可捕获的致命错误:类stdClass的对象无法在第191行转换为字符串

Kin*_*nch 24

array_unique()

可选的第二个参数sort_flags可用于使用以下值修改排序行为:

排序类型标志:

  • SORT_REGULAR - 正常比较项目(不要更改类型)
  • SORT_NUMERIC - 以数字方式比较项目
  • SORT_STRING - 将项目比较为字符串
  • SORT_LOCALE_STRING - 根据当前区域设置将项目作为字符串进行比较.

另请注意下面的变更说明

5.2.10 将sort_flags的默认值更改回SORT_STRING.

5.2.9 添加了可选的sort_flags默认为SORT_REGULAR.在5.2.9之前,此函数用于在内部对SORT_STRING对数组进行排序.

$values = array_unique($values, SORT_REGULAR);
Run Code Online (Sandbox Code Playgroud)


dec*_*eze 10

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

var_dump($uniques);
Run Code Online (Sandbox Code Playgroud)


Ste*_*rex 5

函数的默认行为array_unique()是首先将内部值视为字符串.所以发生的事情是PHP试图将你的对象变成字符串(这会引发错误).

您可以像这样修改函数调用:

$uniqueArray = array_unique($rows, SORT_REGULAR);
Run Code Online (Sandbox Code Playgroud)

这将比较值而不更改其数据类型.

  • 此函数在多维数组中不起作用 (4认同)