PHP数组排序和输出行为


PHP array sorting and outputting behaviour

我有这个数组

$arr = array('key1' => 1, 'key3' => 3, 'key2' => 2);

现在我想对数组按值降序排序。所以我尝试了下面的

arsort($arr);
print_r($arr);

输出
Array(
    [key3] => 3
    [key2] => 2
    [key1] => 1 
)

但是当我尝试以下操作时,我得到的输出为1

print_r(arsort($arr));

既然我正在排序数组,然后在两种情况下输出,为什么它给我不同的输出?

为什么它给我不同的输出?

查看函数文档:

bool arsort (array &$array [, int $sort_flags = SORT_REGULAR])

这个函数对数组进行排序,使数组的下标保持它们的值与所关联的数组元素的相关性。

成功时返回TRUE,失败时返回FALSE。

它使用对数组的引用,对其进行排序,然后在第一种情况下输出排序后的数组。

在第二种情况下,您将输出函数的结果-它返回TRUE,表明排序成功。

输出1的原因是arsort()返回一个布尔值:

成功返回TRUE,失败返回FALSE

当将布尔值转换为字符串(称为类型杂耍)时,将其转换为以下两个值之一:

  • TRUE被转换成字符串"1"
  • FALSE变成空字符串,""

如果你想显示数组的内容,你应该先对数组进行排序,然后,然后输出它:

arsort($arr);
print_r($arr);

Asort在成功时返回true,在失败时返回false,您正在打印排序结果,在php中Asort更改您正在排序的变量(有副作用),当打印Asort($arr)时,您只要求打印函数的返回值,在这种情况下为true。

请考虑阅读arsort()函数的PHP文档,特别是返回值