开发者

php merge arrays

开发者 https://www.devze.com 2023-04-02 01:37 出处:网络
I have been trying (unsuccessfully) to merge the output of multiple arrays into a single array. An example of what I tried was:

I have been trying (unsuccessfully) to merge the output of multiple arrays into a single array. An example of what I tried was:

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

That worked fine, but with the code I am using below, how may I achieve the desired output I am looking for?

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

while(!feof($file)) {
    $line开发者_如何学运维s[] = explode("\t", fgets($file));
}   
fclose ($file);

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

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

My current output is:

Array
(
    [0] => Item one
)

Array
(
    [0] => Item two
)

Array
(
    [0] => Item three
)

Array
(
    [0] => Item four
)

Desired output would be:

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

Thank you for any suggestions in advanced.


using array_merge_recursive ::

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

outputs

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


There may be a better way, but this should work. Just loop through and merge each array individually:

$items = array();

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

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

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


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

this ll work fine


You could add the items to a new array sequentially to achieve your desired result:

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


Your example that works is completely different from your non working code. You are not even using array_merge in it.

If you are only accessing scalar elements, the following will work, but does not use array_merge either:

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

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

If you are interested in all of $inner, than you would use array_merge:

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


modify your last foreach loop to look like this:

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号