文档章节

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

大音希声
 大音希声
发布于 2017/03/23 14:50
字数 457
阅读 3
收藏 0
<?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是比较好的选择。


© 著作权归作者所有

大音希声
粉丝 1
博文 34
码字总数 12496
作品 0
北京
私信 提问
机器学习系列(三)——Numpy数组与矩阵

Numpy.array基本操作 生成一个数组 生成一个矩阵 基本属性 查看x数据维度out: 返回一个元组,查看具体大小out: 返回x中数据个数out: 查看y数据维度out: 返回一个元组,查看具体大小out: 返回...

Ice_spring
06/07
0
0
c# ref out parames 关键字

c# 方法的参数传递有四种类型:传值(by value),传址(by reference),输出参数(by output ),数组参数(by array)。 注:传值参数无须额外的修饰符,传址参数需要修饰符ref,输出参数需...

木木情深
2013/10/20
57
0
C++传值、传引用

C++传值、传引用 C++的函数参数传递方式,可以是传值方式,也可以是传引用方式。传值的本质是:形参是实参的一份复制。传引用的本质是:形参和实参是同一个东西。 传值和传引用,对大多数常见...

lovedan
2017/05/07
0
0
《高性能javascript》 领悟随笔之-------DOM编程篇

    《高性能javascript》 领悟随笔之-------DOM编程篇一   序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整个页面文档。DOM编程性能一...

grootzhang
2016/04/28
0
0
JavaScript Memoization:让函数也有记忆功能

realazy在blog上给出了一个JavaScript Memoization的实现,Memoization就是函数返回值的缓存,比如一个函数参数与返回结果一一对应的hash列表,wiki上其实也有详细解释,我不细说了,只讨论一...

文艺小青年
2017/04/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Flink Graph生成及Hash生成分析

222

MrPei
14分钟前
1
0
[译]Android Activity 和 Fragment 状态保存与恢复的最佳实践

https://blog.csdn.net/growing_tree/article/details/53759564 https://blog.csdn.net/u013588712/article/details/54691791...

shzwork
15分钟前
1
0
调用第三方快递鸟物流单号查询接口API代码示例

最近进行网站后台开发,需要实现物流的即时查询,发现之前集成的 快递100物流查询 API ——【PHP 快递查询源码资源】 已经不能正常使用了; 为了方便以后的业务需求,经过比较,最后选择使用...

程序的小猿
22分钟前
2
0
java Poi 操作执行excel 文件中函数问题

poi 读取excel 文件,当excel 有函数时,poi直接读取返回的是excel 函数,并不能返回函数计算结果: 解决步骤: sheet.setForceFormulaRecalculation(true); 判断该列格式是否为...

早a
30分钟前
4
0
js模拟实现输入框input事件

直接修改value值是无法触发对应元素的事件的。 通过发送输入框input事件了, 可以触发。 这里简单封装了一个方法. window.inputValue = function (dom, st) { var evt = new InputEvent('i...

開援带碼
31分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部