对简单对象进行排序[重复]

Posted

技术标签:

【中文标题】对简单对象进行排序[重复]【英文标题】:Sorting simple Object [duplicate] 【发布时间】:2022-01-10 03:53:56 【问题描述】:

基材:

我有一个基本列表$food

["id":"123","name":"apple","id":"456","name":"Rost Beef",...]

我首先用$food_reduced = array_count_values(array_columns($food, "id")); 减少。

[123:2,456:5,...]

然后我通过$food_reducedforeach($food_reduced as $id => $count) 循环查询数据库以获取类别(蔬菜、水果、肉类、鱼类等)我存储到循环之前声明的$food_byCategory = array();

 if ($food_byCategory[$row["ctg_name"]])
 
      $food_byCategory[$row["ctg_name"]] += $count;
 
 else
 
      $food_byCategory[$row["ctg_name"]] = $count;
 

这给了我这个我想在 php 中排序的数组(gettype() 说它至少是一个数组):


        Vegetable: 2
        Fruit: 1
        Fish: 5
        Drinks: 1
        Meat: 2
        Desert: 3

到这里:


        Fish: 5
        Desert: 3
        Meat: 2
        Vegetable: 2
        Drinks: 1
        Fruit: 1

注意key 排序完成后,value 排序。

然后目标是按值降序将此列表显示为 html 列表。

我试过asortsortarsort,有或没有选项SORT_NUMERIC等... 无论它根本不工作,还是它正在擦除密钥并用索引替换它们。

我也尝试过将它类型转换为数组,但没有任何改变(可能是因为它已经是数组?但是,不是对象?)

我有点迷路了。 帮忙?


解决了我的问题,通过另一种方式构建“count”数组:

 if (!in_array($ctg_id, array_column($food_byCategory, "id")))
 
      $food_byCategory[] = array(
           "id" => $ctg_id,
           "count" => 1
      );
 
 else
 
      $index = array_search($ctg_id, array_column($food_byCategory, "id"));
      $food_byCategory[$index]["count"]++;
 

然后用usort对其进行排序:

usort($food_byCategory, function($a, $b) 
    return $b["count"] <=> $a["count"];
);

【问题讨论】:

对象的属性排序没用。 没用还是不可能? 我会说两个。 现在,如果它实际上不是一个对象,而是一个关联数组,那么它既可能而且可能有用。 其实 gettype() 说它是一个数组.. :x 【参考方案1】:

asort() 适用于关联数组,而不是对象。

您可以通过将其类型转换为描述here,轻松地将您的对象转换为关联数组。

$array = (array) $yourObject;

【讨论】:

没用,但可能是因为我猜它不是一个对象......:x 那是什么?一个JSON?如果是这样,您可以使用 json_decode($json, true);将其转换为关联数组。 我已经编辑了原始问题来解释我是如何构建它的。但如果它确实是一个数组,为什么 sort() 函数不起作用?我的文字字符串在工作时会被删除。但我想保留它们。 您确定在关联数组上使用 asort() 吗?因为它应该完全符合您的要求...这是 PHP 手册:php.net/manual/en/function.asort.php【参考方案2】:

你可以使用一个叫做 sort 的 php 函数,试试这样:

$myArray = array(4, 6, 2, 22, 11);
sort($myArray);

结果:2、4、6、11、22

$myArray = array(4, 6, 2, 22, 11);
rsort($myArray);

结果:22、11、6、4、2

【讨论】:

我的数组有我想保留的键。

以上是关于对简单对象进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JQuery使用日期对对象数组进行排序[重复]

JavaScript按属性值对字典进行排序[重复]

对对象的数字数组进行排序[重复]

按属性对对象列表进行排序[重复]

PHP - 按对象属性对对象数组进行排序[重复]

按字符串属性C#对对象列表进行排序[重复]