php filter array values and remove duplicates from multi dimensional array

前端 未结 4 1911
故里飘歌
故里飘歌 2020-12-21 12:14

Hello all im trying to find duplicate x values from this array and remove them and only leave the unique ones. For example my array is

Array
(
[0] => Arr         


        
4条回答
  •  -上瘾入骨i
    2020-12-21 12:40

    array_unique compares string values, so you can create objects (with an overloaded __toString function) as an intermediate step.

    class XKeyObj {
        public $x;
        public $y;
    
        public function XKeyObj($x, $y) {
            $this->x = $x;
            $this->y = $y;
        }
    
        public function __toString() { return strval($this->x); }
    }
    
    function array_to_xKey($arr) { return new XKeyObj($arr['x'], $arr['y']); }
    function xKey_to_array($obj) { return array('x' => $obj->x, 'y' => $obj->y); }
    
    $input = array(
        array('x' => 0.5, 'y' => 23),
        array('x' => 23, 'y' => 21.75),
        array('x' => 14.25, 'y' => 21.875),
        array('x' => 19.375, 'y' => 21.75),
        array('x' => 9.125, 'y' => 21.875),
        array('x' => 23, 'y' => 19.625),
        array('x' => 19.375, 'y' => 19.625)
    );
    
    $output = array_map('xKey_to_array',
                        array_unique(array_map('array_to_xKey', $input)));
    
    print_r($output);
    

    The result:

    Array
    (
        [0] => Array
            (
                [x] => 0.5
                [y] => 23
            )
    
        [1] => Array
            (
                [x] => 23
                [y] => 21.75
            )
    
        [2] => Array
            (
                [x] => 14.25
                [y] => 21.875
            )
    
        [3] => Array
            (
                [x] => 19.375
                [y] => 21.75
            )
    
        [4] => Array
            (
                [x] => 9.125
                [y] => 21.875
            )
    
    )
    

提交回复
热议问题