PHP 练习题二参考答案

问题一:用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'));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值