2016-04-22 58 views
0

我有兩個基本上是HTML表格數據的數組。我想合併成一個。其中一個陣列$headers將始終比第二個陣列$data小。將具有不等值的兩個數組合併到鍵值對中

例如:

$headers = array("Name","Phone","E-Mail"); 
$data = array("Bob", "Phone1", "E-Mail1", "Mike", "Phone2", "Email2", "Jim", "Phone3", "E-Mail3"); 

我想要的就是以某種方式循環通過這兩個陣列,並將它們合併成一個帶有鍵值對這個落得:基本上

$values[1][Name]  = "Bob"; 
$values[1][Phone]  = "Phone1"; 
$values[1][E-Mail]  = "E-Mail1"; 
$values[2][Name]  = "Mike"; 
$values[2][Phone]  = "Phone2"; 
$values[2][E-Mail]  = "E-Mail2"; 
$values[3][Name]  = "Jim"; 
$values[3][Phone]  = "Phone3"; 
$values[3][E-Mail]  = "E-Mail3"; 

,將它們拆分成按表格的行排序的多維數組。

現在,以不同方式存儲我的數據不是一種選擇。我的問題是如何將它提取到這個新的數組中。

+0

'array_combine'在數組中需要相同數量的值。我現在正在查看'array_chunk' - 會回覆你... – KickingLettuce

+0

索引真的從1開始而不是0? –

+0

@ Don'tPanic no。錯字。無論如何,我刪除了這個問題,不需要這個問題。 – KickingLettuce

回答

0

這是我如何解決它,只有使用array_chunks

$values = array_chunk($data, count($headers)); 

這幾乎產生了我想要的,除了關鍵是來自標題數組的索引,而不是標題本身。因爲我仍然有我參考了頭陣,當我通過就想循環,我沒有這樣說:

當我想在陣列中使用這些值,我摘錄如下:

foreach ($values[$key] as $key => $value) 
{ 
     $value; // the data 
     $headers[$key]; // the header (String, not index) 
} 
2

你可以用一點數學來設置正確的鍵。

foreach ($data as $key => $value) { 
    $values[(int) $key/3][$headers[$key % 3]] = $value; 
} 
2

您可以用array_chunkarray_map組合做,array_combine

$headers = array("Name","Phone","E-Mail"); 
$data = array("Bob", "Phone1", "E-Mail1", "Mike", "Phone2", "Email2", "Jim", "Phone3", "E-Mail3"); 

$result = array_map(function ($chunk) use ($headers) { 
    return array_combine($headers, $chunk); 
}, array_chunk($data, count($headers))); 

結果:

Array 
( 
    [0] => Array 
     ( 
      [Name] => Bob 
      [Phone] => Phone1 
      [E-Mail] => E-Mail1 
     ) 

    [1] => Array 
     ( 
      [Name] => Mike 
      [Phone] => Phone2 
      [E-Mail] => Email2 
     ) 

    [2] => Array 
     ( 
      [Name] => Jim 
      [Phone] => Phone3 
      [E-Mail] => E-Mail3 
     ) 

) 
相關問題