0

假设我做了一个查询:

select * from branches

现在,我得到一个结果:

ID | CODE | Name  | etc...
1  | ABC  | One   | etc...
2  | BED  | Two   | etc...
3  | CPE  | Three | etc...
4  | FEE  | Four  | etc...

我最终会得到一个可以像这样使用的数组:

$data[0]->name;

我想改变这个数组,所以我可以这样称呼它:

$data['ABC']->name;

转换数组以使其键是数组中的一项的最快方法是什么?即最好没有循环和分配?

4

3 回答 3

4

我认为最简单的解决方案。

$assoc = array();
$length = count($data);

for($i = 0; $i < $length; $i++) {
    $assoc[$data[$i]->CODE] = $data[$i]; 
}

print_r($assoc);

虽然我相信有一个单一的解决方案。但是,我不记得它了。

编辑:

更改了循环条件,很好地调用了 Raymond。

于 2013-08-05T11:10:24.717 回答
1

如果您真的想使用紧凑的代码,这是一个内联解决方案。

但是,我认为这比简单的foreach循环要混乱得多。

$arr = array(your obj array);

$assoc = array();
array_walk($arr, function($v) {global $assoc; $assoc[$v->CODE]=$v;});

print_r($assoc);
于 2013-08-05T11:18:26.800 回答
0

在您的脚本中的某个地方,您必须通过结果集进行处理并构建此数组,所以为什么不回顾一下。

你可能在做什么!

while ( $row = yourFetch ) {
    $data[] = $row;
endwhile;
return $data;

你可以这样做:-

while ( $row = yourFetch ) {
    $data[$row->CODE] = $row;
endwhile;
return $data;

然后您不必在事件之后添加任何处理。

于 2013-08-05T11:24:54.787 回答