phparraysmultidimensional-array

Convert multidimensional array into single array in PHP


How i can convert multidimensional array into a single array in php? I spent a few hours to find a solution but i couldn't find a solution that works for me. Here is my code:

<?php

$arrContextOptions=array(
    "ssl"=>array(
        "verify_peer"=>false,
        "verify_peer_name"=>false,
        "http" => array(
            "header" => "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
        )
    )
);

$source_url = 'http://netsparker.com/';
$html = file_get_contents($source_url,false, stream_context_create($arrContextOptions));
$dom = new DOMDocument;
@$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');


foreach ($links as $link) {
    $result_url = $link->getAttribute('href');


    if (!preg_match('/^https?:\/\//', $result_url)) {
        $result_url = $source_url . preg_replace('/^\//', '', $result_url);


    }
    $array2 = array($result_url);
    print_r($array2);
}



?>

Array
(
    [0] => http://github.com/#start-of-content
)
Array
(
    [0] => https://help.github.com/articles/supported-browsers
)
Array
(
    [0] => https://github.com/
)
Array
(
    [0] => http://github.com/join?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F&source=header-home
)
Array
(
    [0] => http://github.com/features
)
Array
(
    [0] => http://github.com/features/code-review/
)
Array
(
    [0] => http://github.com/features/project-management/
)

....

I want to turn it into:

Array
(
    [0] => http://github.com/
    [1] => http://github.com/collections
    [2] => http://github.com/topics
    [3] => http://github.com/explore
    [4] => http://github.com/enterprise
    .......
) 

I tried with foreach,ArrayIterator,flatten but it seems to don't work. I also tried to transform result_url into an array but also doesn't worked.


Solution

  • Try pushing the values onto a single array in your foreach loop:

    $array2 = [];
    foreach ($links as $link) {
        $result_url = $link->getAttribute('href');
    
        if (!preg_match('/^https?:\/\//', $result_url)) {
            $result_url = $source_url . preg_replace('/^\//', '', $result_url);
        }
    
        $array2[] = $result_url;
    }
    print_r($array2);