2016-01-20 74 views
0

輸入數組陣列陣列轉換(增加尺寸和格式的數)

$input = array (
"group_name_1" => "audi", 
"group_locations_1" => "tokyo,barcelona,paris", 
"group_quantities_at_locations_1" => "1,2,7", 
"group_name_2" => "ford", 
"group_locations_2" => "london,prag", 
"group_quantities_at_locations_2" => "3,6" 
); 

需要輸出形式

$target_output = array (
"audi" => array ("tokyo" => 1, "barcelona" => 2, "paris" => 7), 
"ford" => array ("london" => 3, "prag" => 6) 
); 

註釋1:

  • NU許多小組都是動態的(用戶輸入)。例如,除了 「audi」和「ford」;也可能是「豐田」,「奔馳」。
  • 每組有3個子信息: 位置的1個名稱,2個位置和3個數量。
  • 輸入中的序列總是相同的。第一名,第二名,第三名 數量。

  • 每組都有正確的訂單號始終在輸入。 (如 「group_name_ 或group_locations_ )

注意事項2:再次我讀過陣列功能和嘗試了各種代碼,但我甚至無法靠近

能否請你幫我。

回答

1

假設group_name_x, group_locations_x and group_quantities_at_locations_x鍵alwas在存在陣列

$input = array(
    "group_name_1" => "audi", 
    "group_locations_1" => "tokyo,barcelona,paris", 
    "group_quantities_at_locations_1" => "1,2,7", 
    "group_name_2" => "ford", 
    "group_locations_2" => "london,prag", 
    "group_quantities_at_locations_2" => "3,6" 
); 

$new_array = array(); 

foreach ($input as $key => $val) { 
    if (strpos($key, 'group_name') !== false) { 
     $new_array[$val] = array(); 
     $group_no = $key[strlen($key) - 1]; 
     $location_array = explode(',', $input["group_locations_{$group_no}"]); 
     $group_quantities_array = explode(',', $input["group_quantities_at_locations_{$group_no}"]); 
     $new_array[$val] = array_combine($location_array, $group_quantities_array); 
    } 
} 

print_r($new_array); 

輸出:

Array 
(
    [audi] => Array 
     (
      [tokyo] => 1 
      [barcelona] => 2 
      [paris] => 7 
     ) 

    [ford] => Array 
     (
      [london] => 3 
      [prag] => 6 
     ) 

) 
1
<?php 

$inputs = array (
    "group_name_1" => "audi", 
    "group_locations_1" => "tokyo,barcelona,paris", 
    "group_quantities_at_locations_1" => "1,2,7", 
    "group_name_2" => "ford", 
    "group_locations_2" => "london,prag", 
    "group_quantities_at_locations_2" => "3,6" 
); 

$result = array(); 
foreach ($inputs as $key => $value) { 
    if (!preg_match('/group_name_([0-9]*)/', $key, $matches)) { 
     continue; 
    } 

    $locations = explode(',', $inputs['group_locations_' . $matches[1]]); 
    $quantities = explode(',', $inputs['group_quantities_at_locations_' . $matches[1]]); 
    $result[$value] = array_combine($locations, $quantities); 
} 

echo '<pre>'; 
var_dump($result); 
echo '</pre>'; 
+1

對於讀者:這個解決方案也適用,也許更有效地進行編碼。我接受了另一個,因爲我理解了邏輯,如果需要的話我可以修改該代碼。非常感謝你@Matei Mihai –

0

您可以簡單地使用array_walk等作爲

$result = []; 
$chunked = array_chunk($input,3); 
array_walk($chunked,function($v) use (&$result){ 
    $result[$v[0]] = array_combine(explode(",",$v[1]),explode(",",$v[2])); 
}); 
print_R($result); 

Demo

+0

它有一些嚴格的錯誤。請查看https://3v4l.org/sRd1f –

+1

查看更新@ChetanAmeta –