Krsort似乎在特定情况下不起作用


krsort doesn't seem to work in a particular case

这是代码:

var_dump($images);
array(2) { 
["main_product_image"]=> array(1) { ["bb2018.jpg"]=> string(63) "...018.jpg" }
["XIMAGE"]=> array(1) { ["bb2018x.jpg"]=> string(64) "...18x.jpg" } 
} 
krsort($images, SORT_STRING | SORT_FLAG_CASE) ;
var_dump($images);
array(2) { 
["main_product_image"]=> array(1) { ["bb2018.jpg"]=> string(63) "...018.jpg" } 
["XIMAGE"]=> array(1) { ["bb2018x.jpg"]=> string(64) "...018x.jpg" } }

如您所见,krsort没有效果。为什么?
编辑:在 krsort() 之前,我正在取消设置()数组中的一些元素。这可能与此有关吗?

SORT_FLAG_CASE的支持仅在 PHP 中出现于 5.4.0 版本。

没有它,键将以区分大小写的方式反转排序,这就是为什么'XIMAGE'将遵循'main_image'(如'X'> 'm')。

请注意,如果您尝试在 PHP 版本 5.4

ksort() 不是递归的。

尝试使用ksort($images['main_product_image']然后ksort($images['XIMAGE'])

$images = array(
  "main_product_image" =>
    array(
      "bb2018.jpg"=> "...018.jpg"
    ),
  "XIMAGE"=>
    array(
      "bb2018x.jpg" => "...18x.jpg"
    )
) ;

krsort($images, SORT_STRING | SORT_FLAG_CASE);
var_dump($images);

输出:

array(2) { 'XIMAGE' => array(1) { 'bb2018x.jpg' => string(10) "...18x.jpg" } 'main_product_image' => array(1) { 'bb2018.jpg' => string(10) "...018.jpg" } } 

它工作正常。