gpt4 book ai didi

PHP:我有一个关联数组(int => object),想对它进行排序

转载 作者:可可西里 更新时间:2023-11-01 00:37:08 27 4
gpt4 key购买 nike

class DownTime {
public $total, $longest, $count;
}

我有一个关联数组(键是一个 id,值是 DownTime 对象)。
我想按照 $total
排序我读过 PHP: Sorting Arrays以及关于 stackoverflow 的一些其他问题。

我明白了uasort会做的很好。但是,作为 OOP 方法,我更愿意在 DownTime 类中定义一个特殊函数(例如在 C++ 中定义 operator<(),或在 Java 中实现 Comparable.compareTo()),而不是在调用某些排序函数时传递一个函数。

最佳答案

您可以在 DownTime 类上定义一个 compare() 方法:

class DownTime {
public $total, $longest, $count;
public static function compare(DownTime $a, DownTime $b) {
// compare $a and $b here, and return -1, 0, 1
}
}

然后像这样使用 uasort:

uasort($array, 'DownTime::compare')

在 PHP 中没有这样的“Comparable”接口(interface),但是在 useland 中实现它会非常简单:

interface Comparable {
function compareTo($a);
}

// a generic compare function
function compare($a, $b) {
if ($a instanceof Comparable) return $a->compareTo($b);
if ($a < $b) return -1;
if ($a > $b) return 1;
return 0;
}

// now you can sort without knowing anything about what the array contains:
uasort($array, 'compare');

如果您希望能够使用 ArrayObject 透明地执行此操作:

class SortableArrayObject extends ArrayObject
{
function asort() {
return $this->uasort('compare'); // you can even make compare() a member of
// SortableArrayObject and use
// $this->uasort(array($this,'compare'))
}
}

$arrayObject->asort();

这里容器对容器一无所知,从 OOP 的角度来看更好。

关于PHP:我有一个关联数组(int => object),想对它进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4748249/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com