回显array_count_values时的rsort

时间:2013-01-04 13:00:52

标签: php arrays

这是我的代码

rsort($count_bit);
foreach (array_count_values($count_bit) as $bit => $nums)
{
echo "<tr><td width='90%'>Version: " . $bit .  "</td><td>" . $nums . "</td></tr>";
}

这回应了一个随机顺序,我认为它是因为它对$ count_bit进行排序,后来通过array_count_values运行所以它实际上我需要排序:array_count_values($ count_bit)而不是$ count_bit,我试过

foreach (rsort(array_count_values($count_bit)) as $bit => $nums)

但是没有用,我想也在做

$count_bit1 = new array($count_bit);
rsort($count_bit1);

但是当我回应它时,$ bit只显示为1,2,3,4,5,6,7,8并且失去了它的独特价值。任何想法

我正在处理的任何例子都是:

 Version: 665   14
 Version: 645   1
 Version: 660   5
 Version: 651   1
 Version: 662   1
 Version: 649   1

我希望它显示14,5,1,1,1,1不是随机的,就像它是

$ bit回应版本号,$ nums回应它在原始循环中找到的版本号的数量

2 个答案:

答案 0 :(得分:1)

你的逻辑顺序就是关闭。

在第一个示例中,您使用array_count_value对数组进行排序,然后创建一个新数组(未排序)。

在您的第二个中,您在rsort循环中使用foreach的返回值。 rsort返回一个布尔值。

您需要使用arsort,因为它维护数组的索引,而rsort在进行排序时以数字方式重新排列数组。这就是为什么你的“版本”变得越来越多的原因。

<强> PHP

$new_array = array_count_values($count_bit);
arsort($new_array);
foreach($new_array as $bit => $nums)
{
    // Output your html with your values here
    echo sprintf("Version: %s > Count: %s\n", $bit, $nums);
}

输出(我自己的数组示例)

Version: 665 > Count: 11
Version: 660 > Count: 2
Version: 662 > Count: 1
Version: 645 > Count: 1
Version: 642 > Count: 1

答案 1 :(得分:0)

尝试使用此功能对数组进行排序:

需要3个参数:

1)要排序的数组。 2)您要对该数组进行排序的索引。 3)排序顺序(SORT_ASC或SORT_DESC)

您可以这样称呼:

array_sort($array, 'array_index', SORT_DESC);

不要将返回结果分配给任何变量或数组。它将自动对该数组进行排序,并将新排序的数组分配到同一个数组变量中。

function array_sort($array, $sort_by, $order=SORT_ASC)
    {
        $new_array = array();
        $sortable_array = array();

        if (count($array) > 0) {
            foreach ($array as $k => $v) {
                if (is_array($v)) {
                    foreach ($v as $k2 => $v2) {
                        if ($k2 == $on) {
                            $sortable_array[$k] = strtolower($v2);
                        }
                    }
                } else {
                    $sortable_array[$k] = strtolower($v);
                }
            }

            switch ($order) {
                case SORT_ASC:
                    asort($sortable_array);
                break;
                case SORT_DESC:
                    arsort($sortable_array);
                break;
            }

            foreach ($sortable_array as $k => $v) {
                $new_array[$k] = $array[$k];
            }
        }

        return $new_array;
    }