PHP 自定义数组排序函数 wth usort 不起作用

PHP custom function for array sorting wth usort not working

我正在编写 magento 站点 php 代码并尝试使用标签 ASC 对数组进行排序。 所以值应该按标签排序。

我为此使用了 usort 函数

但即使我使用函数输出也看不出任何差异。

Ex-

        //$info has the array values 
/*which assigned like this 
 $info['options'][] = array(
                        'id'        => $value['value_index'],
                        'label'     => $value['label'],
                        'price'     => $configurablePrice,
                        'oldPrice'  => $this->_prepareOldPrice($value['pricing_value'], $value['is_percent']),
                        'products'  => $productsIndex,
                    );

*/

排序功能如下

 usort($info['options'], function ($a,$b){
                            return strcmp($a['label'],$b['label']);
                        }
                    ); 
var_dump($info);

即使我对数组进行排序也会显示此输出

  var spConfig = new Product.Config(array(10) {
      [0]=>
      array(5) {
        ["id"]=>
        string(5) "46050"
        ["label"]=>
        string(3) "110"
        ["price"]=>
        string(1) "0"
        ["oldPrice"]=>
        string(1) "0"
        ["products"]=>
        array(1) {
          [0]=>
          string(5) "95331"
        }
      }
      [1]=>
      array(5) {
        ["id"]=>
        string(5) "46071"
        ["label"]=>
        string(3) "120"
        ["price"]=>
        string(1) "0"
        ["oldPrice"]=>
        string(1) "0"
        ["products"]=>
        array(1) {
          [0]=>
          string(5) "95332"
        }
      }
      [2]=>
      array(5) {
        ["id"]=>
        string(5) "46086"
        ["label"]=>
        string(3) "130"
        ["price"]=>
        string(1) "0"
        ["oldPrice"]=>
        string(1) "0"
        ["products"]=>
        array(1) {
          [0]=>
          string(5) "95333"
        }
      }
      [3]=>
      array(5) {
        ["id"]=>
        string(5) "46112"
        ["label"]=>
        string(3) "140"
        ["price"]=>
        string(1) "0"
        ["oldPrice"]=>
        string(1) "0"
        ["products"]=>
        array(1) {
          [0]=>
          string(5) "95334"
        }
      }          
      [4]=>
      array(5)
      [6]=>
      array(5) {
        ["id"]=>
        string(5) "46455"
        ["label"]=>
        string(2) "60"
        ["price"]=>
        string(1) "0"
        ["oldPrice"]=>
        string(1) "0"
        ["products"]=>
        array(1) {
          [0]=>
          string(5) "95326"
        }
      }
      [5]=>
      array(5) {
        ["id"]=>
        string(5) "46494"
        ["label"]=>
        string(2) "70"
        ["price"]=>
        string(1) "0"
        ["oldPrice"]=>
        string(1) "0"
        ["products"]=>
        array(1) {
          [0]=>
          string(5) "95327"
        }
      }
      [5]=>
      array(5) {
        ["id"]=>
        string(5) "46527"
        ["label"]=>
        string(2) "80"
        ["price"]=>
        string(1) "0"
        ["oldPrice"]=>
        string(1) "0"
        ["products"]=>
        array(1) {
          [0]=>
          string(5) "95328"
        }
      }  
      
    }

我也尝试了其他几个数组键,但没有一个不起作用,任何人都可以帮我排序,谢谢

尝试将它们转换为整数,因为字符串比较与整数比较非常不同。例如,2 按字典顺序排在 100 之后,但这不是您想要的。

usort ($info['options'], function ($a,$b) {
        $la = intval($a['label']);
        $lb = intval($b['label']);
        if ($la < $lb) return -1;
        if ($la > $lb) return 1;
        return 0;
    }
); 

从PHP7开始,可以直接使用飞船操作符,

usort ($info['options'], function ($a,$b) {
        return intval($a['label']) <=> intval($b['label']);
    }
); 

将您的 usort 实现的第一个参数从这个...

usort($info['label'], function ($a,$b){
    return strcmp($a['label'],$b['label']);
}

为此...

usort($info['options'], function ($a,$b){
    return strcmp($a['label'],$b['label']);
}

您只是使用错误的数组级别进行排序。