我需要转换
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有比做两个循环更好的方法吗?1通过数组,然后另一个循环插入位置?
p.S我知道这很容易。
<?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>';
?>
每当您需要对数组进行排序时,都应该查看"排序数组"的手动页面,它有一个很棒的表,可以帮助您确定要使用哪个排序函数。
在这种情况下,您希望使用uasort()
按值排序,但保留键,并使用strnatcasecmp()
使用"自然"(人工风格)排序方法对值进行排序,这将允许您在1、2和3之后放置10,而不是默认情况下在1之后添加10,这是一种不区分大小写的方式(允许z1和Z10之间的差异等)。
示例:
uasort($example, function($a, $b) {
return strnatcasecmp($a, $b);
});
Array
(
[0] => z1
[3] => Z2
[4] => z3
[1] => Z10
[2] => z12
)