簡體   English   中英

將多維數組拆分為數組

[英]Split multidimensional array into arrays

因此,我從如下形式的表單發布中得到了結果:

$data = [
    'id_1' => [ 
        '0' => 1,
        '1' => 2
     ],
    'id_2' => [ 
        '0' => 3,
        '1' => 4
    ],
    'id_3' => [ 
        '0' => 5,
        '1' => 6
    ]
];

我想要實現的是將這個數組分成兩個不同的數組,如下所示:

$item_1 = [
    'id_1' => 1,
    'id_2' => 3,
    'id_3' => 5
]

$item_2 = [
    'id_1' => 2,
    'id_2' => 4,
    'id_3' => 6
]

我已經嘗試過將所有合適的數組方法(例如array_chunk,array_merge)與循環一起使用,但是我似乎無法全神貫注於如何實現這一點。 我見過很多類似的文章,其中前幾個鍵的名稱不像我的數組那樣(id_1,id_2,id_3)。 但是在我的情況下,鍵的名稱至關重要,因為需要將它們設置為各個數組中的鍵的名稱。

無循環的解決方案,只是為了好玩:

$result = [[], []];
$keys = array_keys($data);
array_map(function($item) use(&$result, &$keys) {
    $key = array_shift($keys);
    $result[0][$key] = $item[0];
    $result[1][$key] = $item[1];
}, $data);

只需一個普通的foreach循環即可。

$item_1 = [];
$item_2 = [];
foreach ($data as $k => $v){
    $item_1[$k] = $v[0];
    $item_2[$k] = $v[1];
}

希望這可以幫助。

比這短得多的文字很難找到:

$item1 = array_map('reset', $data);
$item2 = array_map('end', $data);

說明

array_map希望將回調函數作為其第一個參數。 在第一行,這是reset ,因此reset會的每一個元素上調用$data ,有效地將副數組的第一個元素的值。 array_map將這些結果array_map到一個新數組中,並保留原始鍵。

第二行的功能相同,但功能為end ,可以有效地獲取子數組的最后一個元素的值。

resetend移動內部數組指針這一事實無關緊要。 唯一重要的是,它們還返回放置該指針的元素的值。

假設在每個“ id_1”上只有2組鍵值對,則將執行您希望實現的操作。

$item_1 = array();
$item_2 = array();

foreach ($data as $item) {
    $item_1 = $item[0];
    $item_2 = $item[1];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM