另外一種拼接數據方法,利用數組的傳引用作的。

<?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)
 * &符號是傳的數組的引用地址,而不是數組的值。
 */



補充:php

$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是比較好的選擇。code

相關文章
相關標籤/搜索