2016-09-27 29 views
0

我有多個站點地圖,我想合併它們,但在合併它們之前,我需要爲所有數組中的所有值附加一個唯一變量。動態更新一個函數的PHP數組

// The global variable 
define("BASE_URL", "http://domain.com"); 
$sitemap_full = [ "home" => BASE_URL ]; 

// One of the arrays 
$sitemap_example = [ 
    "foo" => "/bar", 
    "gnu" => "/lar" 
]; 

由於我有多個這些數組,我想創建一個函數來追加鏈接。

function pushToSitemap($initial_sitemap, $sitemap) { 
    foreach ($initial_sitemap as $title => $url) { 
     return $sitemap[$title] = BASE_URL . $url; 
    } 
} 

,並在行動將是:

pushToSitemap($sitemap_example, $sitemap_full); 

但是,這是行不通的,因爲如果我print_r($sitemap_full);它會顯示Array("home", "http://domain.com");

真正讓我感到困擾的是,如果在函數中我回應它們,它們將被回顯。

我在做什麼錯?

編輯

應該顯示

Array(
    "home" => "http://domain.com"m 
    "foo" => "http://domain.com/bar", 
    "gnu" => "http://domain.com/lar 
); 
+4

你foreach'的'非常第一次迭代中返回在'pushToSitemap()'函數,所以它永遠不會繼續迭代;只有在'foreach'循環終止後纔會返回 –

+0

那麼^^^^然後也許你應該向我們展示你想要數組看起來像什麼,因爲它對我來說不完全明顯 – RiggsFolly

+0

'var_dump(array_merge( $ sitemap_full,array_map(function($ value){return BASE_URL。$ value;},$ sitemap_example)));' –

回答

1

你的問題似乎謊言你foreach函數中:

function pushToSitemap($initial_sitemap, $sitemap) { 
    foreach ($initial_sitemap as $title => $url) { 
     return $sitemap[$title] = BASE_URL . $url; 
    } 
} 

返回只是一個單一的項目,更重要的是,格式化關閉。

相反,

function pushToSitemap($initial_sitemap, $sitemap) { 
    foreach ($initial_sitemap as $title => $url) { 
     $sitemap[$title] = BASE_URL . $url; 
    } 
    return $sitemap; 
} 

$sitemap_full = pushToSitemap($sitemap_example, $sitemap_full); 
+2

我猜他甚至不想返回任何內容,只是執行該操作以便Sitemaps「刷新」 。 –

+0

@DawidZbiński - 你怎麼看? – Derek

+1

好的,我的壞。現在我意識到他想合併它們。 –