2012-01-27 103 views
1

我試圖創建一個數組出以下方式三個陣列中:多個新的foreach循環數組

$file_data = array(); 

    foreach($file_ids as $key => $id){ 
     foreach($file_names as $name_key => $name){ 
      foreach($file_amounts as $file_key => $cost){ 
      $file_data[] = array("id" => $id, "filename" => $name, "amount" => $cost); 
      break; 
     } 
     break; 
     } 

    } 

這只是創造了第一排。我怎樣才能把它正確地賦值給$ file_data數組?

謝謝。

UPDATE: 作爲一個例子,我已在爲三個陣列

$file_ids[0] = 2; 
    $file_ids[1] = 4; 

    $file_name[0] = name1; 
    $file_name[1] = name2; 

    $file_amount[0] = 10; 
    $file_amount[1] = 9; 

這些陣列將始終是相同的大小以下。

我想這樣做是疊代這些陣列,並與形式的最終陣列結束:

$final_array = (id, name, amount) 

在其他陣列中的所有行。

+2

給我們示例原始數組和結果數組。 – ariefbayu 2012-01-27 07:26:22

+0

那麼......你有幾個中斷,這意味着停止循環,並且PHP將只處理你嵌套數組的第一個元素。但是你並沒有說你想完成什麼(你期望得到什麼)。 – Palantir 2012-01-27 07:27:50

+0

擺脫休息......你的意思是「創建第一排」,然後打破兩次退出循環 – 2012-01-27 07:28:17

回答

2

這些數組將始終具有相同的大小。

只是循環要麼陣列寬度:

$final_array = array(); 
for($i = 0; $i < count($file_name); $i++) 
{ 
    $final_array[] = array($file_ids[$i],$file_name[$i],$file_amount[$i]); 
} 
+0

哈哈,我知道我讓它變得更加複雜而不是必要的。我將索引更改爲$ i = 1,並且<=(數組在我的情況下構建的方式),現在它工作得非常好!謝謝 – Johny 2012-01-27 07:42:37

+0

@Johny,不客氣。 – ariefbayu 2012-01-27 08:35:19

0

利用array_maparray_combine

$file_ids = array(2, 4); 
$file_name = array('name1', 'name2'); 
$file_amount = array(10, 9); 

$result = array_map(null, $file_ids, $file_name, $file_amount); 

$keys = array('id', 'filename', 'ammount'); 
$result = array_map(function($el) use ($keys) { 
    return array_combine($keys, $el); 
}, $result); 

echo '<pre>'; print_r($result); echo '</pre>'; 

輸出:

Array 
(
    [0] => Array 
     (
      [id] => 2 
      [filename] => name1 
      [ammount] => 10 
     ) 

    [1] => Array 
     (
      [id] => 4 
      [filename] => name2 
      [ammount] => 9 
     ) 
) 
0

僅遍歷一個陣列

$file_ids = array(2,4); 
$file_name = array('name1', 'name2'); 
$file_amount = array(10,9); 

$cnt = count($file_ids); 

$file_data = array(); 
for($i = 0; $i < $cnt; $i++){ 
    $file_data[] = array('id' => $file_ids[$i], 
        'filename' => $file_name[$i], 
        'amount' => $file_amount[$i]); 
} 

var_dump($file_data);