Добавление нескольких элементов в массив PHP в цикле foreach - есть ли лучший способ?

Пример кода

<?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
        )
)

Результат вполне приемлемый, а код читабельный.
Мой вопрос: есть ли лучший /более эффективный /более красивый способ сделать это?

4 голоса | спросил Sam 22 MarpmTue, 22 Mar 2011 19:07:58 +03002011-03-22T19:07:58+03:0007 2011, 19:07:58

3 ответа


0

В этом коде не так уж много можно сделать, вы можете избавиться от необходимости иметь инкрементную переменную ($i), используя foreach($items as $key => $value) и используя $key вместо $i.

ответил Dunhamzzz 22 MarpmTue, 22 Mar 2011 19:12:35 +03002011-03-22T19:12:35+03:0007 2011, 19:12:35
0

Как правило, вы можете использовать что-то вроде array_merge(), но поскольку вы переименовываете ключи, ничего простого нет. Вы могли бы сделать что-то вроде:

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

А затем в вашем текущем цикле foreach есть второй foreach цикл, который повторяет это. Но для меня это не лучше, если вы не делаете одно и то же много раз.

На самом деле array_combine() может помочь, хотя вы должны быть осторожны с этим, чтобы сохранить порядок:

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

Примечание. Возможно, вам придется использовать array_values($item), я не уверен.

ответил Matthew 22 MarpmTue, 22 Mar 2011 19:10:54 +03002011-03-22T19:10:54+03:0007 2011, 19:10:54
0

Вы можете использовать следующий способ

<?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

ответил sazedul 1 PM00000020000003431 2014, 14:32:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132