我有一个项目数组
class Item{
public $username = "";
public $id =""
public function __construct($id,$user){
if($input != "")
$this->id = $id;
if($username !="")
$this->username = $user;
}
}
我正在抓取一些json数据,已经解析(正确)。我正在使用Json并为每个返回的项目制作new Item($userid, $username);
然后我想按Users id排序所以我有以下内容
$ItemArray = array();
foreach($jsonData as $data){
$username = $data['username'];
$id = $data['id'];
$ItemArray = new Item($id,$username);
}
现在我遇到的问题是,我正试图获得$id
并按高到低编号id组织它。
如果我制作一个$id
s的单一数组,那么下面的代码将工作。但是,如果我使用我的实际变量,它将不起作用。
function cmp($a, $b) {
if($a == $b)
return 0;
else
return $a < $b ? 1 : - 1; // reverse order
}
usort($array, "cmp");
(这不是我的真正的代码,我采取我的实际问题和简化一切。实际的程序我有几百行代码。我只需要一个简单的表示我的问题,因为我不能让我的东西工作。
所以我必须做的是更多的检查,以确保传递的每个对象都是它应该是的对象类型。我使用冒泡排序类型的算法,因为我设置它返回排序后的数组。然后循环遍历每个值。下面是bubbleSort函数
function bubbleSort($array) {
if(! $length = count($array)) {
return $array;
}
for($outer = 0; $outer < $length; $outer ++) {
for($inner = 0; $inner < $length; $inner ++) {
if(is_object($array[$outer]) && is_object($array[$inner])) {
if($array[$outer]->id < $array[$inner]->id) {
$tmp = $array[$outer];
$array[$outer] = $array[$inner];
$array[$inner] = $tmp;
}
}
}
}
return $array;
}
我很快意识到我需要一种方法来包含全球范围内的所有帖子。因此,在。php页面的最上方,我有以下类。
class Itemarray{
private $items = "";
public function getItems(){ if(isset($items){return $$items;}}
public function setItems($item){
$this-$items[] = $item;
}
}
$ItemArray = new Itemarray();
当$items在我最初的文章的循环中创建时,我将foreach循环更新为以下
foreach($jsonData as $data){
$username = $data['username'];
$id = $data['id'];
$ItemArray->setItems(new Item($id,$username));
}
然后下一部分是如何遍历每个数组并打印出所需的数据。
echo '<table>';
echo ' <tr>';
echo ' <td>The User IDs are:</td>';
echo ' <td>The Usernames are:</td>';
echo ' </tr>';
foreach(bubbleSort($ItemArray->getItems()) as $item) {
echo '<tr>';
echo ' <td>'.$item->id.'</td>';
echo ' <td>'.$item->username.'</td>';
echo '</tr>';
}
echo '</table>';
请注意,这个解决方案是为我个人的问题而设计的,我不适合你的解决方案
为什么这么复杂的方法,编写自己的排序算法,当你可以很容易地使用ussort()与对象数组:
function cmp($a, $b) {
if($a->id == $b->id)
return 0;
else
return $a->id < $b->id ? 1 : -1;
}
usort($array, "cmp");
按id
排序
或者甚至在从json中提取时将每个项推入SPLHeap,使用类似于上面的
compare()
方法