2014-04-28 24 views
1

我有一段可怕的時間試圖將一組數據按照第三方服務需要的格式進行處理。我不能改變數據進入函數的方式,所以我需要操縱它然後發送它。我已經設法將它篡改爲幾乎正確的狀態,但它只取得數組的第一個值並忽略其餘部分。我想這是因爲我重寫了這些值,但我不知道如何解決它。PHP動態多維數組 - 將數據轉換爲正確的格式

我很新的PHP和想我在這裏失蹤的一些核心陣列的方法或東西,所以任何輸入將不勝感激

數據進入功能($數據)

 
Array (
    [checkbox_customfield_11363] => Array 
     (
      [random unknown string] => Apple 
      [random unknown string] => Orange 
      [random unknown string] => Banana 
     ) 

    [checkbox_customfield_11339] => Array 
     (
      [random unknown string] => Peas 
      [random unknown string] => Potatos 

     ) 
) 

應該將數據按摩到所需格式的功能。第一個foreach循環只是刪除每個數組的名稱的第一部分,它按預期工作 - 可能不是最乾淨的。它是我正在努力的第二個foreach和以下。

public function createCheckBoxField($data) 
{ 
    $checkbox_matches = array(); 
    foreach ($data as $key => $value) { 
     if (preg_match("/checkbox/", $key)) { 
      $newKey = explode('_', $key, 2); 
      $checkbox_matches[$newKey[1]] = $value; 
     } 
    } 

    $checkboxes = array(); 
    foreach ($checkbox_matches as $key1 => $value1) { 

     foreach ($value1 as $test) { 
      $checkboxes += [$key1 => [["value" => $test]]]; 
     } 
    } 
    return $checkboxes; 
} 

代碼返回當前

 
Array 
(
    [customfield_11363] => Array 
     (
      [0] => Array 
       (
        [value] => Apple 
       ) 

     ) 

    [customfield_11339] => Array 
     (
      [0] => Array 
       (
        [value] => Peas 
       ) 

     ) 

) 

我需要它來恢復

 
Array 
(
    [customfield_11363] => Array 
     (
      [0] => Array 
       (
        [value] => Apple 
       ) 
      [1] => Array 
       (
        [value] => Orange 
       ) 
      [2] => Array 
       (
        [value] => Banana 
       ) 

     ) 

    [customfield_11339] => Array 
     (
      [0] => Array 
       (
        [value] => Peas 
       ) 
      [1] => Array 
       (
        [value] => Potato 
       ) 

     ) 

) 
+0

您沒有提供的輸入數據。如果您在stackoverflow上提問,請使用盡可能少的代碼從頭開始創建示例,以演示包含所有數據以重現問題的問題。 – hakre

+0

第一個代碼塊是輸入數據。 –

+0

第一個代碼塊根本就沒有代碼。這是一個語法錯誤。它也沒有正確指定輸入數組,因爲它是模糊的。 – hakre

回答

1

不能確定preg_match等(因爲你還沒有表現出它是什麼意思做) ,但給你的輸入和所需的輸出這應該工作:

foreach($data as $key => $array) { 
    foreach($array as $value) { 
     $result[$key][] = array('value' => $value); 
    } 
} 
+0

非常感謝,這工作很有魅力 –

0

爲什麼你只看到第一個元素的問題是,因爲陣列聯合運營商的您使用的是這一行:

$checkboxes += [$key1 => [["value" => $test]]]; 

因爲$checkboxes包含已關鍵$key1在每次迭代,但第一位的,這是不會被覆蓋。通過陣列聯合,左側的關鍵勝出。

而是推入陣:

$checkboxes[$key1][] = ["value" => $test];