У меня проблема в array_combine()
Предупреждение: array_combine (): Оба параметра должны иметь равное количество элементов в PATH в строке X
Эта ошибка выводится на следующую строку:
foreach(array_combine($images, $word) as $imgs => $w) { //do something }
Как я могу это исправить?
Эта ошибка появляется, когда вы пытаетесь объединить два массива с неравной длиной. В качестве примера:
Array 1: Array (A, B, C) //3 elements Array 2: Array (1, 2, 3, 4) //4 elements
array_combine()
не может объединить эти два массива и будет вызывать предупреждение.
Существуют различные способы приблизиться к этой ошибке.
Вы можете проверить, имеют ли оба массива одинаковое количество элементов и только объединяют их, если они это делают:
<?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"; } ?>
Вы можете объединить два массива и использовать только столько элементов, сколько у меньшего:
<?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 просто перезапишет элементы одним и тем же ключом, и вы сохраните только последний.