php唯一的多维数组,保持从一个维度的最高值入口?

时间:2013-07-21 07:40:27

标签: php arrays sorting unique multidimensional-array

我在关于它们的无数问题列表中有另一个数组唯一的问题。 我可以想象这个问题解决起来很简单,但我根本就没有这个问题。 仅仅因为关于这个问题有很多问题我在这种情况下找不到任何有用的东西。

数组:

Array
(
  [0] => Array
    (
      [0] => blabla values
      [1] => 91.181818181818
    )
  [1] => Array
    (
      [0] => blabla same values
      [1] => 95.333333333333
    )
  [2] => Array
    (
      [0] => blabla other values
      [1] => 86
    )
  [3] => Array
    (
      [0] => blabla other values
      [1] => 92.5
    )
  [4] => Array
    (
      [0] => blabla same values
      [1] => 88.5
    )
)

我想通过第一个数组维度使数组唯一,并且只保留第二个数组中最高值的条目。

也许在MYSQL中这没什么大不了的,但目前我无法在php中实现类似的东西。

所需的输出数组将是:

Array
(
  [0] => Array
    (
      [0] => blabla values
      [1] => 91.181818181818
    )
  [1] => Array
    (
      [0] => blabla same values
      [1] => 95.333333333333
    )
  [2] => Array
    (
      [0] => blabla other values
      [1] => 92.5
    )
)

有没有人聪明的想法?

2 个答案:

答案 0 :(得分:3)

<?php
$list = array(
    array('blabla values',91.181818181818),
    array('blabla same values', 95.333333333333),
    array('blabla other values', 86),
    array('blabla other values', 92),
    array('blabla same values', 88.5),
);
$result = array();
foreach ($list as $item)
{
    $key = $item[0];
    $value = $item[1];
    if (!isset($result[$key]) || $result[$key][1] < $value)
    {
        $result[$key] = $item;
    }
}
$result = array_values($result);
print_r($result);

输出:

Array
(
    [0] => Array
        (
            [0] => blabla values
            [1] => 91.1818181818
        )

    [1] => Array
        (
            [0] => blabla same values
            [1] => 95.3333333333
        )

    [2] => Array
        (
            [0] => blabla other values
            [1] => 92
        )

)

答案 1 :(得分:1)

usort($arr, function ($a, $b){
    return $a[1] - $b[1];
});
$out = array();
foreach ($arr as $key => $value){
    $out[$value[0]] = $value[1];
}
$arr = array_map(NULL, array_keys($out), $out);

输出:

 Array
(
    [0] => Array
        (
            [0] => blabla same values
            [1] => 95.333333333333
        )

    [1] => Array
        (
            [0] => blabla other values
            [1] => 86
        )

    [2] => Array
        (
            [0] => blabla values
            [1] => 91.181818181818
        )

)