请问这串代码 $values[$k]= isset($v[$key]) ? $v[$key] : ''; 中的 $values[$k] 和 $v[$key] 是什么意思。麻烦了各位大神。附上源代码:<?php
function test($array=array(),$key='',$paixu=true){
$result=array();

foreach($array as $k => $v){
$values[$k]= isset($v[$key]) ? $v[$key] : '';
}
unset($v);
$paixu ? asort($values) : arsort($values);

foreach ($values as $k => $v){
$result[$k] = $array[$k];
}
return $result;
}

$data = array(
array('post_id'=>1,'title'=>'如何学好PHP','reply_num'=>582),
array('post_id'=>2,'title'=>'PHP数组常用函数汇总','reply_num'=>182),
array('post_id'=>3,'title'=>'PHP字符串常用函数汇总','reply_num'=>982),
); $paixuhou=test($data,'reply_num',true);
echo "<pre>";
print_r($paixuhou);
?>

解决方案 »

  1.   

    这个test函数,是一个将二维数组的子数组,按照子数组的某个键名对应的键值进行关联排序。
    test($data,'reply_num',true) 帖子按照回复数量'reply_num'升序排列。<?php
    function test($array=array(),$key='',$paixu=true)
    {
        $result=array(); //定义最终返回的数组    foreach($array as $k => $v){
            $values[$k]= isset($v[$key]) ? $v[$key] : '';
        }
        /**
         * 第一循环
         *
         * $k = 0
         * $v = array('post_id'=>1,'title'=>'如何学好PHP','reply_num'=>582),
         *
         * $key = reply_num
         * $v[$key] = 582
         *
         * $values[0] = 582
         *
         * 最终结果
         * $values = [0=>582 , 1=>182 , 2=>982]
         */
        unset($v);    $paixu ? asort($values) : arsort($values);
        /**
         * sort()函数,按照键值排序,键名将会被重置,不保持关联关系
         *
         * asort() a=assoc关联 sort排序 关联升序:关联排序即按照键值升序排序,保持键名=>键值的对应关系
         * arsort() r=reserve反转 关联降序
         *
         * 最终结果
         * $values = [1=>182 , 0=>582 , 2=>982]
         */    foreach ($values as $k => $v){
            $result[$k] = $array[$k];
        }
         /*
         最终结果
          $result = array(
          array('post_id'=>2,'title'=>'PHP数组常用函数汇总','reply_num'=>182),
    array('post_id'=>1,'title'=>'如何学好PHP','reply_num'=>582),
    array('post_id'=>3,'title'=>'PHP字符串常用函数汇总','reply_num'=>982),
    );*/    return $result;
    }
      

  2.   


    foreach ($values as $k => $v){
            $result[$k] = $array[$k];
     }$result[$k]  这里 $k应该没必要,我觉的应该去掉,$result[] = $array[$k];才对。
      

  3.   


    我想问一下,变量后面加一个中括号是什么意思。如$v[$key] 和 $values[$k] 像这样的。
      

  4.   

    我也觉得该这样,还有如果$result[¥k] = ¥array[¥k];  这样写返回的结果没有错吗?$result这个数组下标该从0开始吧而不是$array保持的下标