问题一:用PHP的数组array()的形式写出上面表的数据结构。
$arrays = array(
0 => array('id'=>1,'name'=>'张三','age'=>30),
1 => array('id'=>2,'name'=>'李四','age'=>22),
2 => array('id'=>3,'name'=>'王五','age'=>28),
3 => array('id'=>4,'name'=>'老王','age'=>35)
);
var_dump($array);
问题二:写一个方法,实现 Age 的排序,既可以从大到小的排序,也能从小到大的排序。请用PHP代码实现。注:代码约简洁易懂越好。
/**
* [sortByAge description]
* @param [type] $array [二维数组]
* @param [type] $field [排序字段]
* @param string $sortType [排序规则;SORT_DESC 倒序 ,SORT_ASC 正序 ;默认为倒序]
* @return [type] [description]
*/
function sortByAge($array,$field,$sortType="SORT_DESC"){
//定义一个数组
$arrSort = array();
//将二维数组循环
foreach ($array AS $key => $value) {
//将二维数组循环后,得出一维数组,将一维数组的value循环
foreach ($value AS $k => $v) {
//将二维数组的形式拆分,字段成为数组的key
//例如上面的数组:id为一个key,name为一个key,age为一个key
$arrSort[$k][$key] = $v;
}
}
//array_multisort() 函数返回排序数组
//详情参考:https://www.w3school.com.cn/php/func_array_multisort.asp
//参数一:$arrSort[$field] 排序的数组,需要是一维数组
//参数二:constant($sortType) 排序的类型,constant 返回一个常量的值
//参数三:原数组
array_multisort($arrSort[$field],constant($sortType), $array);
return $array;
}
print_r(sortByAge($array,'age'));
问题三:假设问题一的数组非常大,现在要写一个方法,要获取指定年龄的用户,需要怎么去优化这个数组或者是需要怎么去快速的找到我指定年龄的用户;用PHP代码实现。
/**
* [searchArray description]
* @param [type] $array [被查找的数组]
* @param [type] $key [查找的key]
* @param [type] $value [查找的value]
* @param [type] $rKey [输出的key]
* @return [type] [description]
*/
//测试 10万条数据 只需0.5秒左右
function searchArray($array,$key,$value,$rKey){
//定义数组下标,从0开始
$i = 0;
//循环数组
foreach($array as $keyp => $valuep){
//判断循环到当前指定的key不等于需要匹配的value
if($valuep[$key] != $value){
//销毁单个数组元素
unset($array[$keyp]);
}else{ //匹配到指定的value
//重新更换数组的下标,从0开始替换
$data[$i][$rKey] = $valuep[$rKey];
//每替换一次下标,然后下标加一,被下次使用
$i++;
}
}
//返回数据
return $data;
}
print_r(searchArray(json_decode($array,true),'age',28,'name'));