Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中使用最小循环对多维数组排序_Php_Arrays_Sorting_Multidimensional Array - Fatal编程技术网

PHP中使用最小循环对多维数组排序

PHP中使用最小循环对多维数组排序,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,如何使用PHP根据其名称的前缀编号对以下数组进行排序,并生成如下输出: 1-First 2-Capico 4-Apple 10-Zebra $array = Array ( [0] => stdClass Object ( [term_id] => 6 [name] => 1-First [slug] => aaa-a [term_group] => 0 [term_taxonomy_id] => 6 [taxonomy

如何使用PHP根据其
名称
的前缀编号对以下数组进行排序,并生成如下输出:

    1-First
    2-Capico
    4-Apple
    10-Zebra



$array  = Array ( [0] => stdClass Object ( [term_id] => 6 [name] => 1-First [slug] => aaa-a [term_group] => 0 [term_taxonomy_id] => 6 [taxonomy] => category [description] => [parent] => 4 [count] => 2 [cat_ID] => 6 [category_count] => 2 [category_description] => [cat_name] => 1-First [category_nicename] => aaa-a [category_parent] => 4 ) 
        [1] => stdClass Object ( [term_id] => 9 [name] => 10-Zebra [slug] => aaa-f [term_group] => 0 [term_taxonomy_id] => 9 [taxonomy] => category [description] => [parent] => 4 [count] => 1 [cat_ID] => 9 [category_count] => 1 [category_description] => [cat_name] => 10-Zebra [category_nicename] => aaa-f [category_parent] => 4 ) 
        [2] => stdClass Object ( [term_id] => 8 [name] => 2-Capico [slug] => aaa-c [term_group] => 0 [term_taxonomy_id] => 8 [taxonomy] => category [description] => [parent] => 4 [count] => 1 [cat_ID] => 8 [category_count] => 1 [category_description] => [cat_name] => 2-Capico [category_nicename] => aaa-c [category_parent] => 4 ) 
        [3] => stdClass Object ( [term_id] => 7 [name] => 4-Apple [slug] => aaa-b [term_group] => 0 [term_taxonomy_id] => 7 [taxonomy] => category [description] => [parent] => 4 [count] => 1 [cat_ID] => 7 [category_count] => 1 [category_description] => [cat_name] => 4-Apple [category_nicename] => aaa-b [category_parent] => 4 ) ) 
4-Apple
2-Capico
10-Zebra
1-First
试用

sort($array,SORT_NUMERIC);
foreach ( $array as $single ) {
echo $single->name;
}
但将输出显示为

    1-First
    2-Capico
    4-Apple
    10-Zebra



$array  = Array ( [0] => stdClass Object ( [term_id] => 6 [name] => 1-First [slug] => aaa-a [term_group] => 0 [term_taxonomy_id] => 6 [taxonomy] => category [description] => [parent] => 4 [count] => 2 [cat_ID] => 6 [category_count] => 2 [category_description] => [cat_name] => 1-First [category_nicename] => aaa-a [category_parent] => 4 ) 
        [1] => stdClass Object ( [term_id] => 9 [name] => 10-Zebra [slug] => aaa-f [term_group] => 0 [term_taxonomy_id] => 9 [taxonomy] => category [description] => [parent] => 4 [count] => 1 [cat_ID] => 9 [category_count] => 1 [category_description] => [cat_name] => 10-Zebra [category_nicename] => aaa-f [category_parent] => 4 ) 
        [2] => stdClass Object ( [term_id] => 8 [name] => 2-Capico [slug] => aaa-c [term_group] => 0 [term_taxonomy_id] => 8 [taxonomy] => category [description] => [parent] => 4 [count] => 1 [cat_ID] => 8 [category_count] => 1 [category_description] => [cat_name] => 2-Capico [category_nicename] => aaa-c [category_parent] => 4 ) 
        [3] => stdClass Object ( [term_id] => 7 [name] => 4-Apple [slug] => aaa-b [term_group] => 0 [term_taxonomy_id] => 7 [taxonomy] => category [description] => [parent] => 4 [count] => 1 [cat_ID] => 7 [category_count] => 1 [category_description] => [cat_name] => 4-Apple [category_nicename] => aaa-b [category_parent] => 4 ) ) 
4-Apple
2-Capico
10-Zebra
1-First
在PHP5.3中,您可以使用。在旧版本上,您可以使用手册中所示的正常比较功能

usort($array, function ($a, $b) {
    //saving values converted to integer
    $intAname=(int) $a->name;
    $intBname=(int) $b->name;

    //if they are equal, do string comparison
    if ($intAname == $intBname) {
        return strcmp($a->name, $b->name);
    }

    return ($intAname < $intBname) ? -1 : 1;
});
usort($array,function($a,$b){
//保存转换为整数的值
$intAname=(int)$a->name;
$intBname=(int)$b->name;
//如果它们相等,则进行字符串比较
如果($intAname==$intBname){
返回strcmp($a->name,$b->name);
}
返回($intAname<$intBname)?-1:1;
});
排序顺序很好,因为您的
name
字符串以数字开头,所以PHP会

更新:根据@binaryLV的建议添加了整数强制转换,还解决了@konforce(使用
strcmp()
)提到的
1-foo和1-bar
问题。

从PHP5.3开始,您可以使用。在旧版本上,您可以使用手册中所示的正常比较功能

usort($array, function ($a, $b) {
    //saving values converted to integer
    $intAname=(int) $a->name;
    $intBname=(int) $b->name;

    //if they are equal, do string comparison
    if ($intAname == $intBname) {
        return strcmp($a->name, $b->name);
    }

    return ($intAname < $intBname) ? -1 : 1;
});
usort($array,function($a,$b){
//保存转换为整数的值
$intAname=(int)$a->name;
$intBname=(int)$b->name;
//如果它们相等,则进行字符串比较
如果($intAname==$intBname){
返回strcmp($a->name,$b->name);
}
返回($intAname<$intBname)?-1:1;
});
排序顺序很好,因为您的
name
字符串以数字开头,所以PHP会

更新:按照@binaryLV的建议添加了整数强制转换,还解决了@konforce(使用
strcmp()
)提到的
1-foo和1-bar
问题。

要进行数字排序:

usort($data, function($a, $b) { return $a->name - $b->name; });
要按数字排序,请执行以下操作:

usort($data, function($a, $b) { return $a->name - $b->name; });

“2-Capico”
“10斑马”
。我会在操作数之前加上
(int)
。“排序顺序会很好,因为(…)”-你试过了吗<代码>变量转储('2-Capico'>'10 Zebra')打印
布尔值true
。如果两个字符串都是数字(而不是以数字开头),那么您的语句将为true,因为它不会给出正确的结果。现在我看到@VolkerK,man使用的
strnatcasecmp()
,我不知道:)。@binaryLV目前我无法测试它,但只要可以,我就会更新。手册的链接描述了字符串如何转换为数字,当需要这种转换时。如果两个操作数都是字符串,并且其中至少有一个不是数字,则操作数不会转换为数字。为了说明这一点,
var_dump('2'='0x2','2'='0x2x')
将输出
true,false
,第一种情况下两个字符串都是数字,第二种情况下第二个操作数不是数字。
“2-Capico”
“10 Zebra”
。我会在操作数之前加上
(int)
。“排序顺序会很好,因为(…)”-你试过了吗<代码>变量转储('2-Capico'>'10 Zebra')打印
布尔值true
。如果两个字符串都是数字(而不是以数字开头),那么您的语句将为true,因为它不会给出正确的结果。现在我看到@VolkerK,man使用的
strnatcasecmp()
,我不知道:)。@binaryLV目前我无法测试它,但只要可以,我就会更新。手册的链接描述了字符串如何转换为数字,当需要这种转换时。如果两个操作数都是字符串,并且其中至少有一个不是数字,则操作数不会转换为数字。为了说明这一点,
var_dump('2'='0x2','2'='0x2x')
将输出
true,false
,在第一种情况下,两个字符串都是数字,在第二种情况下,第二个操作数不是数字。感谢您的回复。让我try@stereofrog,这取决于上下文。e、 例如,
1-foo
1-bar
在按整数排序时将被视为相等。但是如果前缀索引是唯一的,那就没关系了。谢谢你的回复。让我try@stereofrog,这取决于上下文。e、 例如,
1-foo
1-bar
在按整数排序时将被视为相等。但是,如果前缀索引是唯一的,那么这并不重要。