【问题标题】: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

标签: php sorting


【解决方案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

【讨论】:

  • 我的数组有我想保留的键。
猜你喜欢
  • 2012-01-04
  • 1970-01-01
  • 2010-11-15
  • 2011-12-31
  • 2012-02-28
  • 2012-01-17
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多