我有一个自定义PHP函数,它执行存储过程并返回一个数组:
function test(){
$in = array("abc","bcd","efg");
$result = mydba->executestoredprocedure('proc1',$in);
$arr_sim = array();
foreach ($result['recordset'] as $rows) {
if (!empty($rows)) {
echo $arr_sim[$rows['field1']] = $rows['field2'];
}
}
return $arr_sim;
}
在上面的函数$arr_sim
中,当rows["field1"]
值不同时,正确返回项目数。如果rows["field1"]
值相同则覆盖第一个值并仅返回最后一个值。我怎么能克服这个?
array ( [chicago] => 'sears', [rochester] => 'liberty' )
如果$arr_sim
包含这些项目,则会正确返回。因为键是不同的。
array ( [chicago] => 'MCD', [chicago] => 'TACOBELL' )
如果$arr_sim
包含这些项目,则无法正确返回。因为钥匙是相同的,“芝加哥”。
答案 0 :(得分:1)
数组键必须是唯一的。相反,做这样的事情:
// You want the array to look like this
// array('chicago' => array('MCD', 'TACOBELL'));
function test(){
$in = array("abc","bcd","efg");
$result = mydba->executestoredprocedure('proc1',$in);
$arr_sim=array();
foreach ($result['recordset'] as $rows) {
if(!empty($rows)){
if(array_key_exists($rows['field1'], $arr_sim) {
$arr_sim[$rows['field1']][] = $rows['field2'];
} else {
$arr_sim[$rows['field1']] = array($rows['field2']);
}
}
}
return $arr_sim;
}
答案 1 :(得分:0)
将$arr_sim[$rows['field1']] = $rows['field2']
替换为$arr_sim[$rows['field1']][] = $rows['field2']
。这将创建一个数组数组。
echo $arr_sim['chicago'][0]; // MCD
echo $arr_sim['chicago'][1]; // TACOBELL
从技术上讲,你应该写这样的东西以避免注意:
if (!isset($arr_sim[$rows['field1']])) $arr_sim[$rows['field1']] = array();
$arr_sim[$rows['field1']][] = $rows['field2'];
但你必须真的问自己,field1
(城市名称)是否值得成为阵列的主键?如果没有,您应该选择其他标识符。