php数组转换

LiveAsaMonster 2014-12-02 05:08:16

如下数组:
$test = array(
1 => '1_5000',
2 => '1_10000',
3 => '1_7000',
4 => '1_6500',
5 => '1_5500',
6 => '1_10500',
7 => '0_0',
8 => '1_9000',
9 => '1_7000',
10 => '1_11000',
11 => '1_5000',
12 => '0_0'
);

我需要对它的value进行拆分,然后按'_'后面的值由高到低排序,中间为0的值顺序不能变化,求解
...全文
173 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2014-12-03
  • 打赏
  • 举报
回复
usort 的第二个函数是回调函数名(字符串) 你需要确保这个函数是已定义的 如果你使用类的方法作为回调函数,那么应该写作 array($this, '方法名') 这个用法几乎没有文字资料(包括手册)做过说明,但散见于一些代码中
LiveAsaMonster 2014-12-03
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
$test = array(
 1 => '1_5000',
 2 => '1_10000',
 3 => '1_7000',
 4 => '1_6500',
 5 => '1_5500',
 6 => '1_10500',
 7 => '0_0',
 8 => '1_9000',
 9 => '1_7000',
 10 => '1_11000',
 11 => '1_5000',
 12  => '0_0',
);

foreach($test as $k=>$v) {
  if($v == '0_0') $t[$k] = $v;
  else $r[] = $v;
}
usort($r, 'foo');
$i = 1;
foreach($r as $v) {
  if(isset($t[$i])) $test[$i] = $t[$i];
  else $test[$i] = $v;
  $i++;
}
var_export($test);

function foo($a, $b) {
  list(, $a,, $b) = explode('_', $a . "_$b");
  if($a == $b) return 0;
  return $a > $b ? -1 : 1;
}
array (
  1 => '1_11000',
  2 => '1_10500',
  3 => '1_10000',
  4 => '1_9000',
  5 => '1_7000',
  6 => '1_7000',
  7 => '0_0',
  8 => '1_5500',
  9 => '1_5000',
  10 => '1_5000',
  11 => '1_5000',
  12 => '0_0',
)
感谢老大,学习了usort。但是当我将这段代码在一个类中使用时,就会报错了 usort() expects parameter 2 to be a valid callback, function 'foo' not found or invalid function name 这个报错是什么意思
LiveAsaMonster 2014-12-03
  • 打赏
  • 举报
回复
学习了,结贴.
傲雪星枫 2014-12-02
  • 打赏
  • 举报
回复

$test = array(
 1 => '1_5000',
 2 => '1_10000',
 3 => '1_7000',
 4 => '1_6500',
 5 => '1_5500',
 6 => '1_10500',
 7 => '0_0',
 8 => '1_9000',
 9 => '1_7000',
 10 => '1_11000',
 11 => '1_5000',
12  => '0_0'
);

$tmp = array();
$statickey = array();
foreach($test as $key=>$val){
	if($val=='0_0'){
		$statickey[$key] = $val;
	}else{
		list($a,$b) = explode('_', $val);
		array_push($tmp, $b);
	}
}

rsort($tmp);

for($i=1,$j=0,$len=count($test); $i<=$len; $i++){
	if(!isset($statickey[$i])){
		$result[$i] = $tmp[$j];
		$j++;
	}else{
		$result[$i] = $statickey[$i];
	}
}

print_r($result);

Array
(
    [1] => 11000
    [2] => 10500
    [3] => 10000
    [4] => 9000
    [5] => 7000
    [6] => 7000
    [7] => 0_0
    [8] => 6500
    [9] => 5500
    [10] => 5000
    [11] => 5000
    [12] => 0_0
)
xuzuning 2014-12-02
  • 打赏
  • 举报
回复
$test = array(
 1 => '1_5000',
 2 => '1_10000',
 3 => '1_7000',
 4 => '1_6500',
 5 => '1_5500',
 6 => '1_10500',
 7 => '0_0',
 8 => '1_9000',
 9 => '1_7000',
 10 => '1_11000',
 11 => '1_5000',
 12  => '0_0',
);

foreach($test as $k=>$v) {
  if($v == '0_0') $t[$k] = $v;
  else $r[] = $v;
}
usort($r, 'foo');
$i = 1;
foreach($r as $v) {
  if(isset($t[$i])) $test[$i] = $t[$i];
  else $test[$i] = $v;
  $i++;
}
var_export($test);

function foo($a, $b) {
  list(, $a,, $b) = explode('_', $a . "_$b");
  if($a == $b) return 0;
  return $a > $b ? -1 : 1;
}
array (
  1 => '1_11000',
  2 => '1_10500',
  3 => '1_10000',
  4 => '1_9000',
  5 => '1_7000',
  6 => '1_7000',
  7 => '0_0',
  8 => '1_5500',
  9 => '1_5000',
  10 => '1_5000',
  11 => '1_5000',
  12 => '0_0',
)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧