我需要转换
array(
'0' => 'z1',
'1' => 'Z10',
'2' => 'z12',
'3' => 'Z2',
'4' => 'z3', )
进入
array(
'0' => 'z1',
'3' => 'Z2',
'4' => 'z3',
'1' => 'Z10',
'2' => 'z12',
)
不使用asort 。我的插入方法是不是在我的数组中插入任何东西我做错了什么? P.S有更好的方法,然后做2循环? 1通过数组然后另一个循环到位置插入?
P.S我知道asort很容易。
<?php
$arr = array(
'0' => 'z1',
'1' => 'Z10',
'2' => 'z12',
'3' => 'Z2',
'4' => 'z3',
);
$new_arr = array();
$temp = array();
foreach($arr as $key=>$value)
{
if(empty($new_arr))
{
$new_arr[$key] = $value;
}
else
{
if(sanitizeValue($new_arr[$key-1]) > sanitizeValue($value))
{
foreach($new_arr as $key_p => $value_p)
{
if(sanitizeValue($value) < sanitizeValue($value_p))
{
insert($new_arr, $key_p, array($key=>$value));
}
}
}
else
{
$new_arr[$key] = $value;
}
}
}
function insert($array, $index, $val)
{
$temp = array(); // this temp array will hold the value
$size = count($array); //because I am going to use this more than one time
//echo $size; echo $index;
if (!is_int($index) || $index < 0 || $index > $size)
{
return -1;
}
else
{
$temp = array_slice($array, 0, $index);
$temp[] = $val;
return array_merge($temp, array_slice($array, $index, $size));
}
}
function sanitizeValue($str)
{
$str = filter_var($str, FILTER_SANITIZE_NUMBER_INT);
return $str;
}
echo '<pre>';
print_r($new_arr);
echo '</pre>';
?>
答案 0 :(得分:1)
每当您需要对数组进行排序时,您应该查看Sorting Arrays的手册页,它有一个很棒的表格可以帮助您确定要使用的排序函数。
在这种情况下,您希望使用uasort()
按值排序但保留密钥,并使用strnatcasecmp()
使用&#34;自然&#34;对值进行排序。 (人类风格)排序方法,它允许你在1,2和3之后放置10而不是在默认情况下在1之后添加,以不区分大小写的方式(允许z1和Z10之间的差异等。
uasort($example, function($a, $b) {
return strnatcasecmp($a, $b);
});
Array
(
[0] => z1
[3] => Z2
[4] => z3
[1] => Z10
[2] => z12
)