PHP 按列对对象数组进行自然排序

问题描述 投票:0回答:1

我在对数组进行排序时遇到一些问题。 我调用 API,得到的数据如下

array:41 [
  0 => StreetData {#251
    +house: "1 Some Street"
    +street: ""
  }
  1 => StreetData {#236
    +house: "11 Some Street"
    +street: ""
  }
  2 => StreetData {#236
    +house: "4 Some Street"
    +street: ""
  }
]

我正在尝试进行自然排序,所以一直在尝试

ksort($address->streets);

这似乎并没有改变任何事情。 我所追求的基本上是自然搜索。 所以应该首先考虑数字,然后考虑街道。 所以对于上述情况,我希望它是

array:41 [
  0 => StreetData {#251
    +house: "1 Some Street"
    +street: ""
  }
  1 => StreetData {#236
    +house: "4 Some Street"
    +street: ""
  }
  2 => StreetData {#236
    +house: "11 Some Street"
    +street: ""
  }
]

因为 11 大于 4。这是一个相当模糊的例子,显然我希望有 2、3 等。

那么我怎样才能实现这种自然的排序呢?

php arrays sorting
1个回答
3
投票

我认为你需要

strnatcmp
usort

<?php
    class StreetData
    {
        public $house;
        public $street;

        public function StreetData($a, $b)
        {
            $this->house = $a;
            $this->street = $b;
        }
    }

    $arr = array(
        new StreetData("1 Some Street", ""),
        new StreetData("11 Some Street", ""),
        new StreetData("4 Some Street", ""),
    );

    function mySort($a, $b)
    {
        return strnatcmp($a->house, $b->house);
    }

    usort($arr, "mySort");

    var_dump($arr);
?>
© www.soinside.com 2019 - 2024. All rights reserved.