我想在下面得到以下输出。我正在使用foreach执行以下操作,但它不打印数字。而不是得到'0','1'或'2',我得到一个空白''。
我如何按预期打印阵列?
$results = array (
array(
'body' => 'somevalue1',
'title' => 'somevalue1',
'type' => 'foo'
),
array(
'body' => 'somevalue2',
'title' => 'somevalue2',
'type' => 'foo'
),
array(
'body' => 'somevalue3',
'title' => 'somevalue3',
'type' => 'bar'
),
array(
'body' => 'somevalue4',
'title' => 'somevalue4',
'type' => 'foobar'
),
array(
'body' => 'somevalue5',
'title' => 'somevalue5',
'type' => 'foobar'
),
array(
'body' => 'somevalue6',
'title' => 'somevalue6',
'type' => 'foobar'
),
);
期望的输出:
$values = array(
'foo' => array(
[0] => array(
'body' => 'some value',
'title' => 'some value'
),
[1] => array(
'body' => 'other value',
'title' => 'other value'
)
),
'bar' => array(
[0] => array(
'body' => 'some value',
'title' => 'some value'
)
),
'foobar' => array(
[0] => array(
'body' => 'some value',
'title' => 'some value'
),
[1] => array(
'body' => 'other value',
'title' => 'other value'
),
[2] => array(
'body' => 'other value',
'title' => 'other value'
)
),
);
码:
$value_index = array(); //used to keep track of number of values under field1
foreach($results as $row) {
//get number of field1's. if none, then set to 0
$num = isset($value_index[$row.type]) ? $value_index[$row.type] : 0;
/* performs some logic here */
//store values in temp array
$temp['body'] = $row.body;
$temp['title'] = $row.title;
$values[$row.type][$num] = $temp;
$value_index[$row.type] = $num + 1;
}//end foreach
目前的问题:
目标:
您可以让php在您的迭代声明中使用[]
自动索引您的数组。 array_slice()
是使用键提取前两个元素的简洁方法,但如果您喜欢微优化,则可以全部输入。
代码:(Demo)
foreach($results as $a){
$output[$a['type']][]=array_slice($a,0,2);
//or faster&more verbose: $output[$a['type']][]=['body'=>$a['body'],'title'=>$a['title']];
}
var_export($output);
输出:
array (
'foo' =>
array (
0 =>
array (
'body' => 'somevalue1',
'title' => 'somevalue1',
),
1 =>
array (
'body' => 'somevalue2',
'title' => 'somevalue2',
),
),
'bar' =>
array (
0 =>
array (
'body' => 'somevalue3',
'title' => 'somevalue3',
),
),
'foobar' =>
array (
0 =>
array (
'body' => 'somevalue4',
'title' => 'somevalue4',
),
1 =>
array (
'body' => 'somevalue5',
'title' => 'somevalue5',
),
2 =>
array (
'body' => 'somevalue6',
'title' => 'somevalue6',
),
),
)