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']);
}
您只是使用错误的数组级别进行排序。
我正在编写 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']);
}
您只是使用错误的数组级别进行排序。