<?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是比较好的选择。