Сартаванне PHP масіў (ы) на аснове іх пачатковых ключоў?

Я хачу, каб адсартаваць мой зыходны масіў (ы), якія ўтрымліваюць шмат ключоў і значэнняў ўнутры, у масіў (ы) сартуецца па вызначаным ключу, і ўсе значэння для гэтага ключа ў адным масіве на аснове ключа.

Дык вось масіў у мяне ёсць:

$Before = Array(Array("id" => 1, "name" => "Dogs"), 
                Array("id" => 2, "name" => "Lions"), 
                Array("id" => 3, "name" => "Tigers"));

І гэта масіў, які я хацеў бы скончыць з:

$After = Array("ids"   => Array(1, 2, 3), 
               "names" => Array("Dogs", "Lions", "Tigers"));

Я спадзяюся, што мае сэнс. Я знайшоў, што гэта прасцей, каб паказаць вам прыклад, як супрацьстаяць ахарактарызаваўшы яго.

2
Гэта больш падобна на рэструктурызацыю, чымсьці
дададзена аўтар Mark Baker, крыніца
Так, не быў сапраўды ўпэўнены, як гэта растлумачыць.
дададзена аўтар Josh Foskett, крыніца
Так, не быў сапраўды ўпэўнены, як гэта растлумачыць.
дададзена аўтар Josh Foskett, крыніца
Калі ж гэта трэба адсартаваны, а таксама рэструктурызацыі, можа паспрабаваць выкарыстаць код у прыкладзе № 3 php.net/manual/en/function.array-multisort.php
дададзена аўтар Pudge601, крыніца

8 адказы

You can use array_reduce

$After = array_reduce($Before, function ($a, $b) {
    $a['ids'][] = $b['id'];
    $a['names'][] = $b['name'];
    return $a;
});

Live Demo

2
дададзена

You can use array_reduce

$After = array_reduce($Before, function ($a, $b) {
    $a['ids'][] = $b['id'];
    $a['names'][] = $b['name'];
    return $a;
});

Live Demo

2
дададзена
$after = array(
    'ids'   => array(),
    'names' => array()
);

foreach($before as $row){
    $after['ids'][]   = $row['id'];
    $after['names'][] = $row['name'];
}

var_dump($after);
2
дададзена
$after = array(
    'ids'   => array(),
    'names' => array()
);

foreach($before as $row){
    $after['ids'][]   = $row['id'];
    $after['names'][] = $row['name'];
}

var_dump($after);
2
дададзена

Можа быць нешта накшталт:

foreach ($input as $item) {
    foreach ($item as $field => $value) {
        $result[$field][] = $value;
    }
}
    var_dump($result);
0
дададзена

Можа быць нешта накшталт:

foreach ($input as $item) {
    foreach ($item as $field => $value) {
        $result[$field][] = $value;
    }
}
    var_dump($result);
0
дададзена
$After = array();
foreach ($Before as $a) {
    $After['ids'][] = $a['id'];
    $After['names'][] = $a['name'];
}

Гэта павінна працаваць :)

0
дададзена
$After = array();
foreach ($Before as $a) {
    $After['ids'][] = $a['id'];
    $After['names'][] = $a['name'];
}

Гэта павінна працаваць :)

0
дададзена