如何以特定方式对 PHP 中的数组进行排序
How to sort an array in PHP in a specific way
代码:
$array = array('even' => array(array('key' => 'test','key2' => 'Wn'), array('key' => 'test3', 'key2' => 'Bx')),
'not_even' => array(array('key' => 'test2','key2' => 'Xn'), array('key' => 'test4', 'key2' => 'Gy')),
);
echo '<pre>';
print_r($array);
echo '</pre>';
输出:
Array
(
[even] => Array
(
[0] => Array
(
[key] => test
[key2] => Wn
)
[1] => Array
(
[key] => test3
[key2] => Bx
)
)
[not_even] => Array
(
[0] => Array
(
[key] => test2
[key2] => Xn
)
[1] => Array
(
[key] => test4
[key2] => Gy
)
)
)
我想对其进行排序,结果应该是:
Array
(
[0] => Array
(
[key] => test
[key2] => Wn
)
[1] => Array
(
[key] => test2
[key2] => Xn
)
[2] => Array
(
[key] => test3
[key2] => Bx
)
[3] => Array
(
[key] => test4
[key2] => Gy
)
)
那么怎么排序呢?数组中的键应该是:
测试
测试2
测试3
测试4。
如何为此使用 foreach 或其他东西?什么是最好的解决方案。
重要的是"key","key2"不重要。
您可以使用array_multisort()
尝试这样的事情:
foreach ($array as $key => $row) {
$array1[$key] = $row[0];
}
array_multisort($array1, SORT_DESC, $array);
试试这个
$array = array('even' => array(array('key' => 'test5','key2' => 'Wn'), array('key' => 'test10', 'key2' => 'Bx')),
'not_even' => array(array('key' => 'test1','key2' => 'Xn'), array('key' => 'test', 'key2' => 'Gy')),
);
$new_array = array();
// changing structure
foreach($array as $values){
$new_array = array_merge($new_array, $values);
}
// dump array
echo '<pre>';
print_r($new_array );
echo '</pre>';
// sorting
/// function for sorting
function cmp($a, $b)
{
return strcasecmp($a['key'], $b['key']);
}
// sort by 'key'
uksort($new_array, "cmp");
// dump array
echo '<pre>';
print_r($new_array );
echo '</pre>';
注意:这是字符串排序,所以 test 10 < test 5
试试这个例子,我已经在我的系统中测试过,它工作得很好。
<?php
$array = array('even' => array(array('key' => 'test','key2' => 'Wn'), array('key' => 'test3', 'key2' => 'Bx')),
'not_even' => array(array('key' => 'test2','key2' => 'Xn'), array('key' => 'test4', 'key2' => 'Gy')),
);
//Before Sorting
echo '<pre>';
print_r($array);
echo '</pre>';
$my_array = array();
foreach($array as $values){
$my_array = array_merge($my_array, $values);
}
//After Sorting
asort($my_array);
echo '<pre>';
print_r($my_array );
echo '</pre>';
?>
输出:-
Array
(
[even] => Array
(
[0] => Array
(
[key] => test
[key2] => Wn
)
[1] => Array
(
[key] => test3
[key2] => Bx
)
)
[not_even] => Array
(
[0] => Array
(
[key] => test2
[key2] => Xn
)
[1] => Array
(
[key] => test4
[key2] => Gy
)
)
)
Array
(
[0] => Array
(
[key] => test
[key2] => Wn
)
[2] => Array
(
[key] => test2
[key2] => Xn
)
[1] => Array
(
[key] => test3
[key2] => Bx
)
[3] => Array
(
[key] => test4
[key2] => Gy
)
)
我想这就是你需要的。
代码:
$array = array('even' => array(array('key' => 'test','key2' => 'Wn'), array('key' => 'test3', 'key2' => 'Bx')),
'not_even' => array(array('key' => 'test2','key2' => 'Xn'), array('key' => 'test4', 'key2' => 'Gy')),
);
echo '<pre>';
print_r($array);
echo '</pre>';
输出:
Array
(
[even] => Array
(
[0] => Array
(
[key] => test
[key2] => Wn
)
[1] => Array
(
[key] => test3
[key2] => Bx
)
)
[not_even] => Array
(
[0] => Array
(
[key] => test2
[key2] => Xn
)
[1] => Array
(
[key] => test4
[key2] => Gy
)
)
)
我想对其进行排序,结果应该是:
Array
(
[0] => Array
(
[key] => test
[key2] => Wn
)
[1] => Array
(
[key] => test2
[key2] => Xn
)
[2] => Array
(
[key] => test3
[key2] => Bx
)
[3] => Array
(
[key] => test4
[key2] => Gy
)
)
那么怎么排序呢?数组中的键应该是: 测试 测试2 测试3 测试4。 如何为此使用 foreach 或其他东西?什么是最好的解决方案。 重要的是"key","key2"不重要。
您可以使用array_multisort()
尝试这样的事情:
foreach ($array as $key => $row) {
$array1[$key] = $row[0];
}
array_multisort($array1, SORT_DESC, $array);
试试这个
$array = array('even' => array(array('key' => 'test5','key2' => 'Wn'), array('key' => 'test10', 'key2' => 'Bx')),
'not_even' => array(array('key' => 'test1','key2' => 'Xn'), array('key' => 'test', 'key2' => 'Gy')),
);
$new_array = array();
// changing structure
foreach($array as $values){
$new_array = array_merge($new_array, $values);
}
// dump array
echo '<pre>';
print_r($new_array );
echo '</pre>';
// sorting
/// function for sorting
function cmp($a, $b)
{
return strcasecmp($a['key'], $b['key']);
}
// sort by 'key'
uksort($new_array, "cmp");
// dump array
echo '<pre>';
print_r($new_array );
echo '</pre>';
注意:这是字符串排序,所以 test 10 < test 5
试试这个例子,我已经在我的系统中测试过,它工作得很好。
<?php
$array = array('even' => array(array('key' => 'test','key2' => 'Wn'), array('key' => 'test3', 'key2' => 'Bx')),
'not_even' => array(array('key' => 'test2','key2' => 'Xn'), array('key' => 'test4', 'key2' => 'Gy')),
);
//Before Sorting
echo '<pre>';
print_r($array);
echo '</pre>';
$my_array = array();
foreach($array as $values){
$my_array = array_merge($my_array, $values);
}
//After Sorting
asort($my_array);
echo '<pre>';
print_r($my_array );
echo '</pre>';
?>
输出:-
Array
(
[even] => Array
(
[0] => Array
(
[key] => test
[key2] => Wn
)
[1] => Array
(
[key] => test3
[key2] => Bx
)
)
[not_even] => Array
(
[0] => Array
(
[key] => test2
[key2] => Xn
)
[1] => Array
(
[key] => test4
[key2] => Gy
)
)
)
Array
(
[0] => Array
(
[key] => test
[key2] => Wn
)
[2] => Array
(
[key] => test2
[key2] => Xn
)
[1] => Array
(
[key] => test3
[key2] => Bx
)
[3] => Array
(
[key] => test4
[key2] => Gy
)
)
我想这就是你需要的。