Ключ массива php не существует, но я могу напечатать его, поэтому он существует

Я упростил этот код, чтобы попытаться проиллюстрировать проблему.

Этот код говорит, что 3-й ключ или индекс основного массива не существует, когда он действительно существует.

У меня есть массив MAIN с вложенными массивами с номерами.

другой массив со всеми ключами (1,2,3,4)

а затем я делаю комбинации из 3 ключей (пример 1,2,3), выбранных из массива ключей.

Затем, используя 3 ключа, я получаю числа из массива MAIN.

Но так как я понял, что третий ключ не существует, это вызывает у меня проблемы с моим основным кодом.

По крайней мере, здесь вы можете увидеть, что это говорит «его не существует».

function combinations_FUNQ($n,$All_Keys_of_Main_Arr_ARR){
if($n===0)
return array(array());
if(count($All_Keys_of_Main_Arr_ARR)===0)
return array();
$x=$All_Keys_of_Main_Arr_ARR[0];
$TEMP=array_slice($All_Keys_of_Main_Arr_ARR,1,count($All_Keys_of_Main_Arr_ARR)-1);
$res1=combinations_FUNQ($n-1,$TEMP);
for($i=0;$i<count($res1);$i++){
array_splice($res1[$i],0,0,$x);
}
$res2=combinations_FUNQ($n,$TEMP);
return array_merge($res1,$res2);
}

// ARRAY WITH MAIN NUMBERS
$Main_Arr_w_Nums = array( array(1,6), array(5,7,12,23,28,34), array(29,35), array(9,3), array(17,33,37) );

// ARRAY WITH ALL KEYS OF MAIN NUMBERS ARRAY
$All_Keys_of_Main_Arr_ARR=array(1,2,3,4);

// ARRAY WITH ALL POSSIBLE COMBINATIONS OF 3 OF THE PREVIOUS KEYS. EX. 1,2,3 ; 1,2,4
$allTenKeysCombinations_ARR=combinations_FUNQ(3,$All_Keys_of_Main_Arr_ARR);

// FOR EACH KEYS COMBINATION I WANT TO SEE THE MAIN NUMBERS
foreach ($allTenKeysCombinations_ARR as $key => $selectedKeysFromMain_Arr_w_Nums){

for($j=0;$j<=3;$j++){

if(array_key_exists($j,$Main_Arr_w_Nums[($selectedKeysFromMain_Arr_w_Nums[$j])])){
echo 'GOOD: The key: '.$selectedKeysFromMain_Arr_w_Nums[$j].' YES, exists<BR>';
}else{
echo 'PROBLEM: The key: '.$selectedKeysFromMain_Arr_w_Nums[$j].' NO, DOESNOT exist<BR>';
}

echo'Main_Arr_w_Nums:<pre>';
print_r($Main_Arr_w_Nums[$selectedKeysFromMain_Arr_w_Nums[$j]]);
echo'</pre>';

if(!isset( $selectedKeysFromMain_Arr_w_Nums[$j])){
$selectedKeysFromMain_Arr_w_Nums[$j]=null;
}

if(!isset( $Main_Arr_w_Nums[$selectedKeysFromMain_Arr_w_Nums[$j]])){
$Main_Arr_w_Nums[$selectedKeysFromMain_Arr_w_Nums[$j]]=null;
}
echo'<hr>';
}
}

-3

Решение

Я думаю, что проблема здесь:

if(array_key_exists($j,$Main_Arr_w_Nums[($selectedKeysFromMain_Arr_w_Nums[$j])])){
echo 'GOOD: The key: '.$selectedKeysFromMain_Arr_w_Nums[$j].' YES, exists<BR>';
}else{
echo 'PROBLEM: The key: '.$selectedKeysFromMain_Arr_w_Nums[$j].' NO, DOESNOT exist<BR>';
}

когда вы проверяете, существует ли array_key_exists, вы должны сделать это так:

if(array_key_exists($selectedKeysFromMain_Arr_w_Nums[$j],$Main_Arr_w_Nums))
2

Другие решения

Из того, что я вижу, вы ищете $ j, который не является ключом массива, который вы используете позже, внутри значения массива, а не полного массива.

Ваш ключ, начиная со следующей строки, обозначается как $selectedKeysFromMain_Arr_w_Nums[$j] так что это должен быть ключ, который вы ищете внутри массива $Main_Arr_w_Nums,

array_key_exists($selectedKeysFromMain_Arr_w_Nums[$j], $Main_Arr_w_Nums);
1

Проблема в том, что ваш цикл for выполняется 4 раза и в

$allTenKeysCombinations_ARR

у вас просто есть 3 элемента в каждом массиве.

Так что используйте цикл for следующим образом:

for($j=0;$j<3;$j++){ ... }
0
По вопросам рекламы [email protected]