如何使用foreach将数字设置为数组中的键值?

问题描述 投票:-1回答:1

我想在下面得到以下输出。我正在使用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

目前的问题:

  • $ values [$ row.type] [$ num] = $ temp;
  • $ num不保存'0','1'等,它将其保存为''

目标:

  • 将所有类型组合在一起。例如,对于type = foo,我想以一种我以后可以按类型打印它们的方式对它们进行分组。所以我想打印type = foo的所有元素,如果该分组数组中有许多元素,我希望能够通过'0','1','2'等访问它们。
php arrays for-loop grouping
1个回答
1
投票

您可以让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',
    ),
  ),
)
© www.soinside.com 2019 - 2024. All rights reserved.