0

2 つの配列があります。1 つはハードコードされ、もう 1 つはデータベースから取得されたデータです。それらをマージしようとしていますが、予期しない結果が生じています。

これは、最初の配列の出力結果です。

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

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

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

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

これは、2 番目の配列の出力結果です。

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

問題は、両方の配列の配列キーが数値であることです。1 つの配列で別の配列を上書きする場合は、配列のキーが文字列である状態にする必要があります。次のようなことができます。

$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 に答える