PHP中基于类值的新类项数组


Sorting Array of new class items based on class->value for PHP

我有一个项目数组

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()方法