我正在使用
foreach ($objs as $obj) {
$data[] = $obj->getValue;
}
从可能返回的方法中收集值
array[4]{
[0]=>
string(2) "1234"
[1]=>
string(7) "5678"
[2]=>
string(7) "9ab"
[3]=>
string(10) "cdefg"
...
}
但我需要多维关联数组格式的数据,如...
array[2]{
[0] =>
array[2]{
["alpha"]=>
string(2) "1234"
["beta"]=>
string(7) "5678"
}
[1] =>
array[2]{
["alpha"]=>
string(7) "9ab"
["beta"]=>
string(10) "cdefg"
}
我已经能够通过两个独立循环来实现这一点,一个循环将方法数据循环到一个二维数组中,第二个循环遍历该数组并手动将索引值更改为关联值。
$key_labels = array('alpha','beta');
$row_num = $col_num = 0;
$rows = array(
array(),
array()
);
/* Parse the query into a two-dimensional array */
foreach ($objs as $obj) {
$rows[$row_num][$col_num++] = $obj->nodeValue;
if ($col_num == count($key_labels)) {
$col_num = 0;
$row_num++;
}
}
/* Change the array second dimension index values to associative values */
foreach ($rows as $rows_idx => $row) {
unset($rows[$rows_idx]);
foreach ($row as $row_idx => $row_val) {
$rows[$rows_idx][$key_labels[$row_idx]] = $row_val;
}
}
var_dump($rows);
我的问题是......有没有办法比使用两个冗长(和看似笨重)的循环更直接地完成此操作?或者这真的是最好的方式吗?
注意:预计对象将始终返回等于$key_labels
计数的某个偶数因子的行数。
答案 0 :(得分:1)
未经测试,需要php 5.3。但是如果你没有5.3
,你可以用另一个foreach替换array_map和anonymous函数$vals = array();
foreach ($objs as $obj) {
$vals[] = $obj->nodeValue;
}
$key_labels = array('alpha','beta');
$result = array_map(array_chunk($vals, count($key_labels)), function($chunkOfVals) use ($key_labels) {
return array_combine($key_labels, $chunkOfVals);
});
编辑 - 继承非5.3方式。说实话,写完后我更喜欢这种方式。更清楚。
$result = array();
foreach (array_chunk($vals, count($key_labels)) as $chunkOfVals) {
$result[] = array_combine($key_labels, $chunkOfVals);
}
答案 1 :(得分:1)
$i = 0;
foreach ($objs as $j => $obj) {
$data[$j % 2 == 0 ? ++$i : $i][$j % 2 == 0 ? 'alpha' : 'beta'] = $obj->getValue;
}
var_dump($data);
答案 2 :(得分:0)
也许,您可以对数组键使用特定的obj值:
foreach( $objs as $obj) {
$array[$obj->name] = $obj->getValues();
}
或创建一个通过ref。
传递数组的方法答案 3 :(得分:0)
把我的帽子扔进戒指:
$myArray = array();
$tempArray = array();
$counter = 0;
foreach($objs as $obj) {
$tempArray[$key_labels[$counter % 2]] = $obj->getValue;
if($counter % 2 == 0) {
$myArray[] = $tempArray;
$tempArray = array();
}
$counter++;
}
此处完整演示:http://codepad.org/dCX9KEcB
结果如下:
array(4) {
[0]=>
array(1) {
["alpha"]=>
int(12345)
}
[1]=>
array(2) {
["beta"]=>
int(78945)
["alpha"]=>
int(43579)
}
[2]=>
array(2) {
["beta"]=>
int(29853)
["alpha"]=>
int(63542)
}
[3]=>
array(2) {
["beta"]=>
int(75675)
["alpha"]=>
int(12233)
}