【问题标题】:Adding multiple items to a PHP array in a foreach loop - is there a nicer way?在 foreach 循环中向 PHP 数组添加多个项目 - 有更好的方法吗?
【发布时间】:2011-03-22 16:07:58
【问题描述】:

示例代码

<?php 
    $items = array(
        array(
            'forename' => 'Foo',
            'surname' => 'Bar'
        ),
            array(
            'forename' => 'Bar',
            'surname' => 'Foo'
        )
    );

    $arr = array();
    $i = 0;

    foreach($items as $item){
        $arr[$i]['name'] = $item['forename'];
        $arr[$i]['surname'] = $item['surname'];
        $i++;
    }

    echo "<pre>".print_r($arr, true)."</pre>";
?>

结果

Array
(
    [0] => Array
        (
            [name] => Foo
            [surname] => Bar
        )

    [1] => Array
        (
            [name] => Bar
            [surname] => Foo
        )
)

结果完全可以接受,代码可读。
我的问题是:有没有更好/更有效/更漂亮的方法来做到这一点?

【问题讨论】:

    标签: php arrays loops foreach


    【解决方案1】:

    您无法对该代码执行大量操作,您可以通过使用 foreach($items as $key =&gt; $value) 和使用 $key 而不是 $i 来摆脱增量变量 ($i) 的需要。

    【讨论】:

    • 如果你使用$arr[] = $item ... 语法,你甚至不需要变量$i
    • 当我向数组中添加多个项目时,我需要一个共享密钥。使用您指定的方法将为我提供一个完全独立的数组,用于 $arr 内的 namesurname
    • @Sam,是的,但请参阅我的答案以了解如何使用它。
    【解决方案2】:

    这很好,没有更好的方法来做到这一点。这是一个可以说或多或少可读的替代方案:

    $items = array(
        array(
            'forename' => 'Foo',
            'surname' => 'Bar'
        ),
            array(
            'forename' => 'Bar',
            'surname' => 'Foo'
        )
    );
    
    foreach ($items as &$item) {
       $item['name'] = $item['forename'];
       unset($item['forename']);
    }
    

    请注意,如果这很重要,这会将name 键放在surname 之后。

    【讨论】:

      【解决方案3】:

      通常您可以使用array_merge() 之类的名称,但由于您要重命名键,所以没有什么简单的。你可以这样做:

      $keys = array('forename' => 'name', 'surname' => 'surname');
      

      然后在您当前的foreach 循环中,有第二个foreach 循环对其进行迭代。但对我来说,除非你多次做同样的事情,否则这并没有更好。

      实际上,array_combine() 可能会有所帮助,尽管您必须小心这一点才能继续订购:

      $arr[] = array_combine(array('name', 'surname'), $item);
      

      注意:你可能需要使用array_values($item),我不确定。

      【讨论】:

        【解决方案4】:

        您可以使用以下方式

        <?php 
            $items = array(
                array(
                    'forename' => 'Foo',
                    'surname' => 'Bar'
                ),
                    array(
                    'forename' => 'Bar',
                    'surname' => 'Foo'
                )
            );
        
            $arr = array();
        
        
            foreach($items as $item){
                $arr['name'][] = $item['forename'];
                $arr['surname'][] = $item['surname'];
        
            }
        
            echo "<pre>".print_r($arr, true)."</pre>";
        ?>
        

        检查输出http://3v4l.org/v2GhH

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-05
          • 2020-09-26
          • 1970-01-01
          相关资源
          最近更新 更多