通过一键从多维数组中获取唯一性-PHP

时间:2018-08-17 07:47:07

标签: php arrays

关于this问题和this,我在这里有一些不同的问题。

我有一个像这样的数组:

Array
(
    [0] => Array
    (
        [name] => "Size"
        [value] => "Large"
        [id] => "1201"
    )

    [1] => Array
    (
        [name] => "Size"
        [value] => "Small"
        [id] => "1203"
    )

    [2] => Array
    (
        [name] => "Size"
        [value] => "Medium"
        [id] => "1204"
    )

    [3] => Array
    (
        [name] => "Size"
        [value] => "Large"
        [id] => "1205"
    )

    [4] => Array
    (
        [name] => "Size"
        [value] => "Large"
        [id] => "1206"
    )

    [5] => Array
    (
        [name] => "Size"
        [value] => "Large"
        [id] => "1207"
    )

)

以上数组重复了Large次,我想基于value标识唯一的键。并从该数组中删除该索引(0,1,2,3,4,5)。

提及的问题包含这样的问题,但不是我面临的确切问题。

我正在尝试这样:

array_map("unserialize", array_unique(array_map("serialize", $input)));

但不起作用。

2 个答案:

答案 0 :(得分:1)

由于您尚未回答我的问题,所以我认为“ id”是无关紧要的。

通过使用array_column使数组与“ value”关联,它将删除所有重复项,然后array_values将把键重置为索引。

这样,您根本不需要循环。

$arr = array_values(array_column($arr, NULL, "value"));
var_dump($arr);

输出:

array(3) {
  [0]=>
  array(3) {
    ["name"]=>
    string(4) "Size"
    ["value"]=>
    string(5) "Large"
    ["id"]=>
    string(4) "1207"
  }
  [1]=>
  array(3) {
    ["name"]=>
    string(4) "Size"
    ["value"]=>
    string(5) "Small"
    ["id"]=>
    string(4) "1203"
  }
  [2]=>
  array(3) {
    ["name"]=>
    string(4) "Size"
    ["value"]=>
    string(6) "Medium"
    ["id"]=>
    string(4) "1204"
  }
}

https://3v4l.org/aOhVS


如果您想保持最低的“ id”,并且“ id”在数组中越往下越高(例如您的示例),则可以在代码前使用rsort($arr);

rsort($arr);
$arr = array_values(array_column($arr, NULL, "value"));
var_dump($arr);

输出:

array(3) {
  [0]=>
  array(3) {
    ["name"]=>
    string(4) "Size"
    ["value"]=>
    string(5) "Small"
    ["id"]=>
    string(4) "1203"
  }
  [1]=>
  array(3) {
    ["name"]=>
    string(4) "Size"
    ["value"]=>
    string(6) "Medium"
    ["id"]=>
    string(4) "1204"
  }
  [2]=>
  array(3) {
    ["name"]=>
    string(4) "Size"
    ["value"]=>
    string(5) "Large"
    ["id"]=>
    string(4) "1201"
  }
}

https://3v4l.org/VtgAM

答案 1 :(得分:0)

您可以尝试进行foreach创建所需的另一个数组

$arrayOrdenado = array();
foreach($array as $a){
 $arrayOrdenado[$a["value"]][] = $a;
}