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.
2 Answers 2
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);
answered Jul 10, 2020 at 0:46
zeterain
1,1501 gold badge10 silver badges15 bronze badges
Sign up to request clarification or add additional context in comments.
3 Comments
Zeko
I tried and it gives even more arrays with the same values in it. imgur.com/a/xHwANlJ
zeterain
Make sure your
print_r is outside of your foreach loop. It looks like you are calling print_r after every loop iteration.zeterain
Note how the
print_r in my answer comes after the closing brace for the loop.Directly push your sanitized urls into the result array.
$array2 = [];
foreach ($links as $link) {
$array2[] = preg_replace(
'/~^/~',
$source_url,
$link->getAttribute('href')
);
}
var_export($array2);
answered Mar 19, 2025 at 10:17
Comments
lang-php