另一种拼接数据方法,利用数组的传引用做的。

<?php
/**
 * total用来做分页,在model里写的
 * yaf中所有的多条查询都至少是二维的数组,为了方便,我定义成三维的
 * 第二个和第三个数组都是以user_id为主键,没有自增id
 * 假设,分别查了3个表,得到如下三个数组
 * foreach遍历拼接数据开始
 */


//假设从控制器里查到三个数组,分别如下。
$infoArray = array(
	'total' => 3,
	'rows' => array(
		0 => array(
			'id' => 1,
			'user_id' => 1001,
			'name' => '张三丰',
		),
		1 => array(
			'id' => 2,
			'user_id' => 1002,
			'name' => '李司机',
		),
		2 => array(
			'id' => 3,
			'user_id' => 1003,
			'name' => '王武功',
		),
	),
);
$arrayAge = array(
	'total' => 3,
	'rows' => array(
		0 => array(
			'user_id' => 1001,
			'age' => 21,
			'phone' => '13900000001',
		),
		1 => array(
			'user_id' => 1002,
			'age' => 23,
			'phone' => '13900000002',
		),
		2 => array(
			'user_id' => 1003,
			'age' => 18,
			'phone' => '13900000003',
		),
	),
);
$arrayPhone = array(
	'total' => 3,
	'rows' => array(
		0 => array(
			'user_id' => 1001,
			'phone' => '13900000001',
		),
		1 => array(
			'user_id' => 1002,
			'phone' => '13900000002',
		),
		2 => array(
			'user_id' => 1003,
			'phone' => '13900000003',
		),
	),
);


//这个方法一般写在model里,
function formatArray($infoArray, $arrayAge, $arrayPhone)
{
	if(!empty($arrayAge))
	{
		$arrayAgeArr = array();
		foreach((array) $arrayAge['rows'] as $val )
		{
			$arrayAgeArr[$val['user_id']]['age'] = $val['age'];
		}
	}
	if(!empty($arrayPhone))
	{
		$arrayPhoneArr = array();
		foreach((array) $arrayPhone['rows'] as $val )
		{
			$arrayPhoneArr[$val['user_id']]['phone'] = $val['phone'];
		}
	}
	foreach($infoArray['rows'] as &$val)
	{
		if($arrayPhoneArr)
		{
			$val['phone'] = $arrayPhoneArr[$val['user_id']]['phone'];
		}
		if($arrayAgeArr)
		{
			$val['age'] = $arrayAgeArr[$val['user_id']]['age'];
		}
	}
	return $infoArray;
}
var_dump(formatArray($infoArray, $arrayAge, $arrayPhone));die();


/**
 * 举例:$arrayPhoneArr[$val['user_id']]['phone'] = $val['phone'];
 * 总体来说,等号左边,是将$arrayPhoneArr里的user_id作为键名,
 * phone是自定义的第二维数组键名,
 * 等号右边,是值。
 * foreach($infoArray['rows'] as &$val)
 * &符号是传的数组的引用地址,而不是数组的值。
 */



补充:

$order_info = $database_order->field(true)->where($order_condition)->select();

foreach($order_info as $key => $val){
    		$storeId[$val['store_id']] = $val['store_id'];
    		$merId[$val['mer_id']] = $val['mer_id'];
    		$orderId[$val['order_id']] = $val['order_id'];
    	}

$store_where['store_id'] = array('in', $storeId);
    	$store_info = $database_store->field(true)->where($store_where)->select();

$now_order = $orderObj->formatArray($order_info, $store_info, $merchant_info, $deliverSupplyInfo);

补充:不能直接查询整个表中的数据,那样得不偿失。

应该像补充的,有范围的查询,再去整合数据。用in是比较好的选择。


转载于:https://my.oschina.net/u/2983266/blog/865505

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值