2015-11-17 84 views
-1

我試圖使用array_combine()數組作爲關鍵($filenames)兩個數組作爲合併對象數組($tags and $cfContents)爲什麼我不能array_combine一個數組與鍵與對象數組?

$filenames = array(); 
$tags = array(); 
$cfContents = array(); 

// For loop creates three arrays based on each of the set objects 
foreach(new DirectoryIterator('./cf_templates/') as $cfFile) 
{ 
    if ($cfFile->isDot() || !$cfFile->isFile()) continue; 
     $filenames[] = $cfFile->getBasename('.txt'); 

     $tags[] = array("<!-- " . $cfFile->getBasename('.txt') . " CF BEGIN -->", 
        "<!-- " . $cfFile->getBasename('.txt') . " CF END -->"); 

     $cfContents[] = file_get_contents('./cf_templates/' . $cfFile. '.txt'); 

} 

    // $sets = array_combine($filenames, $tags)   // This works. 
    $setContent = array_merge($tags, $cfContents); 
    $sets = array_combine($filenames, $setContent);  // Errors on "Both parameters should have an equal number of elements" 


    print_r($sets); 

當我運行這一點,但是,我一直在數組$組得到警告(見註釋)。我會想象$ setContent合併兩個數組就好了,但問題是$ sets? (請參閱http://php.net/manual/en/function.array-combine.php

幫助 - 爲什麼array_combine()上的$集不起作用?

+3

它不起作用,因爲'$ filenames'具有與'$ setContent'不同的元素數量。我不確定它有多簡潔。 –

回答

0

這條線:

$setContent = array_merge($tags, $cfContents); 

創建一個數組($ setContent)$標籤的大小的兩倍,$ cfContents或$文件名。所以當你調用array_combine時,$ filenames中沒有足夠的值作爲結果數組的鍵。

我想你誤解了array_merge的行爲。它創建一個包含params中給出的兩個數組值的平面數組。也許我可以建議這樣做:

$setContent = array($tags, $cfContents); 
$sets = array_combine($filenames, $setContent); 

print_r($sets); 
+0

嗨,條形碼。感謝您的解釋 - 這正是我需要的。同樣感謝你的建議。它工作得很漂亮! – arl

相關問題