2011-09-01 146 views
3

我一直在嘗試(不成功)將多個數組的輸出合併到一個數組中。什麼,我試過一個例子是:php合併數組

$data1 = array("cat", "goat"); 
$data2 = array("dog", "cow"); 
print_r(array_merge($data1, $data2)); 

這工作得很好,但與代碼我使用如下,請問有什麼可以實現所需的輸出,我找?

$filename = "item.txt"; 
$lines = array(); 
$file = fopen($filename, "r"); 

while(!feof($file)) { 
    $lines[] = explode("\t", fgets($file)); 
} 
fclose ($file); 

foreach ($lines as $inner){ 
    $item = array($inner[1]); 

    echo "<pre>"; 
    print_r($item); 
    echo "</pre>"; 
} 

我的電流輸出爲:

Array 
(
    [0] => Item one 
) 

Array 
(
    [0] => Item two 
) 

Array 
(
    [0] => Item three 
) 

Array 
(
    [0] => Item four 
) 

所需的輸出將是:

Array 
(
    [0] => Item one 
    [1] => Item two 
    [2] => Item three 
    [3] => Item four 
) 

感謝您對先進的任何建議。

+0

你可以扁平化的陣列。在這方面有很多例子可以解決這個問題。 – Joe

回答

2

可能有更好的方法,但這應該起作用。只是循環並單獨合併的每個陣列:

$items = array(); 

foreach ($lines as $inner){ 
    $item = array($inner[1]); 

    $items = array_merge($items, $item); 
} 

echo "<pre>"; 
print_r($items); 
echo "</pre>"; 
+0

這工作!非常感謝。 – Gdsmk

1

你可以添加項目到一個新的數組順序來實現你想要的結果:

: 
$aResult = array(); 
foreach ($lines as $inner) { 
    $item = array($inner[1]); 
    $aResult[] = $item; 
} 
var_dump($aResult); 
1

你舉的例子,工程是從非工作完全不同碼。你甚至沒有使用array_merge

如果只訪問標量元素,下面的工作,但不使用array_merge之一:

$items = array(); 
foreach ($lines as $inner) { 
    $items[] = $inner[1]; 
}  
$items = array_unique($items); 

echo "<pre>"; 
print_r($items); 
echo "</pre>"; 

如果你有興趣在所有的$inner,比你會使用array_merge

$items = array(); 
foreach ($lines as $inner) { 
    $items = array_merge($items, $inner); 
} 
4

使用array_merge_recursive ::

$arr1 = array("Item One"); 
$arr2 = array("Item Two"); 
print_r(array_merge_recursive($arr1, $arr2)); 

輸出

Array ([0] => Item One [1] => Item Two) 
0

修改了上foreach循環看起來像這樣:

$output=array(); 
foreach($lines as $inner){ 
    $output[]=$inner[1]; 
} 
header('Content-type: text/plain; charset=utf-8'); 
print_r($output); 
2
foreach ($lines as $inner) { 
    $items[] = $inner; 
} 

這會工作得很好