9

ここで問題がありますarray_combine()

警告: array_combine(): 行 X の PATH には、両方のパラメーターに同じ数の要素が必要です

このエラーは次の行に表示されます。

foreach(array_combine($images, $word) as $imgs => $w)
{
    //do something
}

どうすれば修正できますか?

4

2 に答える 2

24

このエラーは、長さが等しくない 2 つの配列を結合しようとすると表示されます。例として:

Array 1: Array (A, B, C)     //3 elements
Array 2: Array (1, 2, 3, 4)  //4 elements

array_combine()これらの 2 つの配列を結合することはできず、警告がスローされます。


このエラーにアプローチするには、さまざまな方法があります。

両方の配列に同じ量の要素があるかどうかを確認し、そうである場合にのみ結合できます。

<?php

    $arrayOne = Array("A", "B", "C");
    $arrayTwo = Array(1, 2, 3);

    if(count($arrayOne) == count($arrayTwo)){
        $result = array_combine($arrayOne, $arrayTwo);
    } else{
        echo "The arrays have unequal length";
    }

?>

2 つの配列を組み合わせて、小さい方の要素と同じ数の要素のみを使用できます。

<?php

    $arrayOne = Array("A", "B", "C");
    $arrayTwo = Array(1, 2, 3);

    $min = min(count($arrayOne), count($arrayTwo));
    $result = array_combine(array_slice($arrayOne, 0, $min), array_slice($arrayTwo, 0, $min));

?>

または、不足している要素を埋めることもできます。

<?php

    $arrayOne = Array("A", "B", "C");
    $arrayTwo = Array(1, 2, 3);

    $result = [];
    $counter = 0;

    array_map(function($v1, $v2)use(&$result, &$counter){
        $result[!is_null($v1) ? $v1 : "filler" . $counter++] = !is_null($v2) ? $v2 : "filler";     
    }, $arrayOne, $arrayTwo);

?>

注:すべての例で、キー配列に一意の要素のみが含まれていることを常に確認する必要があります。それ以外の場合、PHP は同じキーで要素を上書きするだけで、最後のキーのみを保持するためです。

于 2013-10-16T06:56:15.903 に答える