为什么我不能使用具有对象数组的键对数组进行array_combine?

时间:2015-11-17 13:59:21

标签: php arrays

我尝试使用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无法正常工作?

1 个答案:

答案 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 );