我尝试使用array_combine()
数组作为键($filenames)
,将两个数组作为组合数组对象($tags and $cfContents)
:
$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 );
然而,当我运行它时,我不断收到数组$ sets的警告(请参阅注释)。我会想象$ setContent合并两个数组就好了,但问题是$ sets? (见http://php.net/manual/en/function.array-combine.php)
帮助 - 为什么array_combine()上的$ sets无法正常工作?
答案 0 :(得分:0)
这一行:
$setContent = array_merge( $tags, $cfContents );
创建一个大小为$ tags,$ cfContents或$ filenames两倍的数组($ setContent)。因此,当您调用array_combine时,$ filenames中没有足够的值作为结果数组的键。
我认为你误解了array_merge的行为。它创建一个平面数组,其中包含params中给出的两个数组的值。也许我可以建议这样做:
$setContent = array($tags, $cfContents);
$sets = array_combine( $filenames, $setContent );
print_r( $sets );