USort 多索引数组 - Return 不正确
USort Multi Index Array - Doesn't Return Correctly
我在使用 PHP 的 usort()
功能时遇到问题。我目前有一个多索引数组,如下所示:
Array
(
[0] => Array
(
[0] => Array
(
[title] => c
[more_fields] => '...'
)
[1] => Array
(
[title] => a
[more_fields] => '...'
)
[2] => Array
(
[title] => b
[more_fields] => '...'
)
[3] => Array
(
[title] => xz
[more_fields] => '...'
)
)
)
我正在尝试遍历数组并按 title
索引对每个索引进行排序。这是没有我的任何测试输入的代码:
foreach( $my_arr as $arr ) {
if( count( $arr ) > 1 ) {
usort( $arr, function( $a, $b ) {
return strcasecmp( $a['title'], $b['title'] );
} );
}
}
现在我希望它能工作,而且我知道我正在点击正确的索引,如果我在 return 之前回显 $a['title']
和 $b['title']
我得到的数据是看起来像:
a _ c | xz _ a | b _ a | c _ a | b _ c | xz _ b | c _ b | xz _ c
很好,很漂亮,但是一旦 foreach
完成,我的数组就不会改变。看起来,查看 PHP 文档,usort()
正在通过引用传递数组,并在完成时 returning 布尔值。我的 usort()
一直保持数组不变,我缺少什么?
foreach
处理数组的副本。要修改实际数组,您需要引用该值(注意 &
):
foreach( $my_arr as &$arr ) {
或者您应该能够使用键和实际数组 $my_arr[$key]
:
foreach( $my_arr as $key => $arr ) {
if( count( $arr ) > 1 ) {
usort( $my_arr[$key], function( $a, $b ) {
return strcasecmp( $a['title'], $b['title'] );
} );
}
}
我在使用 PHP 的 usort()
功能时遇到问题。我目前有一个多索引数组,如下所示:
Array
(
[0] => Array
(
[0] => Array
(
[title] => c
[more_fields] => '...'
)
[1] => Array
(
[title] => a
[more_fields] => '...'
)
[2] => Array
(
[title] => b
[more_fields] => '...'
)
[3] => Array
(
[title] => xz
[more_fields] => '...'
)
)
)
我正在尝试遍历数组并按 title
索引对每个索引进行排序。这是没有我的任何测试输入的代码:
foreach( $my_arr as $arr ) {
if( count( $arr ) > 1 ) {
usort( $arr, function( $a, $b ) {
return strcasecmp( $a['title'], $b['title'] );
} );
}
}
现在我希望它能工作,而且我知道我正在点击正确的索引,如果我在 return 之前回显 $a['title']
和 $b['title']
我得到的数据是看起来像:
a _ c | xz _ a | b _ a | c _ a | b _ c | xz _ b | c _ b | xz _ c
很好,很漂亮,但是一旦 foreach
完成,我的数组就不会改变。看起来,查看 PHP 文档,usort()
正在通过引用传递数组,并在完成时 returning 布尔值。我的 usort()
一直保持数组不变,我缺少什么?
foreach
处理数组的副本。要修改实际数组,您需要引用该值(注意 &
):
foreach( $my_arr as &$arr ) {
或者您应该能够使用键和实际数组 $my_arr[$key]
:
foreach( $my_arr as $key => $arr ) {
if( count( $arr ) > 1 ) {
usort( $my_arr[$key], function( $a, $b ) {
return strcasecmp( $a['title'], $b['title'] );
} );
}
}