使用foreach循环填充php多维数组

时间:2013-06-17 18:56:27

标签: php arrays

我需要创建一个如下所示的数组:

$va_body=array(
    "bundles" => array(
        "$table.$elem" => array("convertCodesToDisplayText" => true),
        "$table.$elem" => array("convertCodesToDisplayText" => true),
    )
);

$table是一个不会更改的字符串,并且从数组中提取$elem。 我接近以下代码,但最终只有$bund的最后一个值,$bund是一个包含两个值的数组。我猜这个数组在每个循环中都被重新声明了吗?

$va_body=array(); // declare the array outside the loop
foreach ($bund as $elem ) {
    $va_body['bundles'] = array($table.".".$elem=>array("convertCodesToDisplayText" => true));
}

$bund数组有两个元素" description"和" type_id"。

$va_body['bundles'][] // Adding [] doesn't work as it modifies the expected outcome.

print_r($va_body)看起来像这样:

Array (
    [bundles] => Array (
        [ca_objects.type_id] => Array (
            [convertCodesToDisplayText] => 1
            )
        )
    ) 

我需要它:

Array (
    [bundles] => Array (
        [ca_objects.description] => Array (
            [convertCodesToDisplayText] => 1
        )
        [ca_objects.type_id] => Array (
            [convertCodesToDisplayText] => 1
        )
    )
)

提前致谢。

@ phpisuber01 使用:

$va_body['bundles'][] = array($table.".".$elem=>array("convertCodesToDisplayText" => true));

print_r($va_body);看起来像这样:

 Array (
    [bundles] => Array (
        [0] => Array (
            [ca_objects.description] => Array (
                [convertCodesToDisplayText] => 1
            )
        )
        [1] => Array (
            [ca_objects.type_id] => Array (
                [convertCodesToDisplayText] => 1
            )
        )
    )
) 

我需要它像这样:

Array (
    [bundles] => Array (
        [ca_objects.description] => Array (
            [convertCodesToDisplayText] => 1
        )
        [ca_objects.type_id] => Array (
            [convertCodesToDisplayText] => 1
        )
    )
)

回答@ phpisuber01:

$va_body['bundles'][$table.".".$elem] = array("convertCodesToDisplayText" => true);

非常感谢!

2 个答案:

答案 0 :(得分:1)

您需要创建一个数组数组。在循环中更改以下行:

$va_body['bundles'][$table.".".$elem] = array("convertCodesToDisplayText" => true);

[]之后添加$va_body['bundles']

所有这一切都是继续将新的包添加到数组中。您的原始代码每次迭代都会覆盖bundle。这就是为什么你只得到最后一个。

更新以更接近OP的确切需求。

答案 1 :(得分:0)

$va_body = array();
$va_body['bundles'] = array();

foreach ($bund AS $elem)
{
    $va_body['bundles']["{$table}.{$elem}"] = array("convertCodesToDisplayText" => true);
}