簡體   English   中英

如何從PHP中的鍵=>“值的數組”數組變為“鍵=>值”的數組數組

[英]How do I go from an array of key => “array of values” to an array of an array of “key => values” in php

ah,我不知道該怎么說。 我正在嘗試將由表單字段輸入生成的一組三個數組重新格式化為與我的模型更匹配的某種東西,以便將值保存到數據庫中。

不知道解決方案是應該對數組進行操作還是應該在表單字段中更改“名稱”屬性。

目前,我有一個輸入數據數組:

array(
  'image_id' => 
    array
      0 => '454' (length=3),
      1 => '455' (length=3),
      2 => '456' (length=3)
  'title' => 
    array
      0 => 'title1' (length=6),
      1 => 'title2' (length=0),
      2 => '' (length=6)
  'caption' => 
    array
      0 => 'caption1' (length=8),
      1 => '' (length=8),
      2 => 'caption3' (length=8)
);

並希望將其更改為類似內容,因此我可以遍歷並將值的每個數組保存到數據庫中的相應資源。

array(
    0 =>
        array
        'image_id'  => '454',
        'title'     => 'title1',
        'caption'   => 'caption1'
    1 =>
        array
        'image_id'  => '455',
        'title'     => 'title2',
        'caption'   => ''
    2 =>
        array
        'image_id'  => '456',
        'title'     => '',
        'caption'   => 'caption3'
);

這樣就可以了:

$array = call_user_func_array('array_map', array_merge(
    [function () use ($array) { return array_combine(array_keys($array), func_get_args()); }],
    $array
));

假設此數據最初來自HTML表單,則可以在此位置修復數據:

<input name="data[0][image_id]">
<input name="data[0][title]">
<input name="data[0][caption]">

<input name="data[1][image_id]">
<input name="data[1][title]">
<input name="data[1][caption]">

然后它將以正確的格式到達您的服務器。

這將使用2個foreach循環遍歷數組。 他們將使用彼此的密鑰來構造新的數組,因此在任何情況下都可以使用:

$data = array(
    'image_id' => array(454, 455, 456),
    'title' => array('title1', 'title2', ''),
    'caption' => array('caption1', '', 'caption3')
);

$result = array();
foreach($data as $key => $value) {
    foreach ($value as $k => $v) {
        $result[$k][$key] = $v;
    }
}

暫無
暫無

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

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