0

我有 2 个数组 - 一个是硬编码的,另一个是从数据库中检索的数据。我正在尝试合并它们,但我得到了意想不到的结果。

这是第一个数组的打印结果:

Array
(
    [0] => Array
    (
        [product_image_one] => 
    )

    [1] => Array
    (
        [product_image_two] => 
    )

    [2] => Array
    (
        [product_image_three] => 
    )

    [3] => Array
    (
        [product_image_four] => 
    )
)

这是第二个数组的打印结果:

Array
(
    [0] => Array
    (
        [product_image_one] => ../wp-content/themes/dosco/images/products_images/355_product_image_one.jpg
    )
)

但是,当我尝试像这样合并它们时:

$new_array = array_merge($base_image_array, $db_product_images);

结果是这样的:

Array
(
    [0] => Array
    (
        [product_image_one] => 
    )

    [1] => Array
    (
        [product_image_two] => 
    )

    [2] => Array
    (
        [product_image_three] => 
    )

    [3] => Array
    (
        [product_image_four] => 
    )

    [4] => Array
    (
        [product_image_one] => ../wp-content/themes/dosco/images/products_images/355_product_image_one.jpg
    )

)

我想要实现的是:

Array
(
    [0] => Array
    (
        [product_image_one] => ../wp-content/themes/dosco/images/products_images/355_product_image_one.jpg
    )

    [1] => Array
    (
        [product_image_two] => 
    )

    [2] => Array
    (
        [product_image_three] => 
    )

    [3] => Array
    (
        [product_image_four] => 
    )

)

我认为数组的多维性质让我感到困惑。

4

3 回答 3

2

将您的 num 索引数组清理为 kv 数组

<?php

$base_image_array = array
(
 array("product_image_one" => ""),
 array("product_image_two" => ""),
 array("product_image_three" => ""),
 array("product_image_four" => "")
);

$db_product_images = array
(
 array("product_image_one" => "../wp-content/themes/dosco/images/products_images/355_product_image_one.jpg"),
);

function kv($a){
    $keys = array_map(current, array_map(array_keys, $a));
    $values = array_map(current, array_map(array_values, $a));

    return array_combine($keys, $values);
}

$base_image_array  = kv($base_image_array);
$db_product_images = kv($db_product_images);

$new_array = array_merge($base_image_array, $db_product_images);
print_r($new_array);

输出

Array
(
    [product_image_one] => ../wp-content/themes/dosco/images/products_images/355_product_image_one.jpg
    [product_image_two] =>
    [product_image_three] =>
    [product_image_four] =>
)
于 2013-11-06T15:36:09.577 回答
0

该解决方案与@Matthew R 的答案非常相似。

/* Base Array */
$base_image_array = array(
    array('product_image_one' => ''),
    array('product_image_two' => ''),
    array('product_image_three' => ''),
    array('product_image_four' => '')
);

/* Populated Array */
$db_product_images = array(
    array("product_image_one" => "../wp-content/themes/dosco/images/products_images/355_product_image_one.jpg")
);

function format_array($array) {
    $return_array = array();
    foreach ($array as $key => $value) {
        foreach ($value as $k => $v) {
            $return_array[$k] = $v;
        }
    }
    return $return_array;
}

$array1 = format_array($base_image_array);
$array2 = format_array($db_product_images);

$final_array = array_merge($array1, $array2);

echo '<pre>';
    print_r($final_array);
echo '</pre>';

结果输出是这样的:

Array
(
    [product_image_one] => ../wp-content/themes/dosco/images/products_images/355_product_image_one.jpg
    [product_image_two] => 
    [product_image_three] => 
    [product_image_four] => 
)

最终输出实际上与我最初认为我需要的不同。

于 2013-11-07T13:03:08.010 回答
0

问题是两个数组中的数组键都是数字的。如果您希望一个数组覆盖另一个数组,则需要使它们进入数组键为字符串的状态。你可以这样做:

$array_with_four = array(...); // The large array
$new_array_with_four = format_arrays($array_with_four);

$array_with_one = array(...); // The small array
$new_array_with_one = format_arrays($array_with_one);

$merged = array_merge($new_array_with_four, $new_array_with_one); // Your new results

function format_arrays($array) {
    $return_array = array(); // Blank array
    foreach ($array as $child_key => $child_data){
        $return_array[$child_key] = $child_data;
    }
    return $return_array;
}

使用 php 数组函数可能有更好的方法来循环这个 - 但这应该可以完成工作!

于 2013-11-06T14:59:05.333 回答