Я упростил этот код, чтобы попытаться проиллюстрировать проблему.
Этот код говорит, что 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>';
}
}
Я думаю, что проблема здесь:
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))
Из того, что я вижу, вы ищете $ j, который не является ключом массива, который вы используете позже, внутри значения массива, а не полного массива.
Ваш ключ, начиная со следующей строки, обозначается как $selectedKeysFromMain_Arr_w_Nums[$j]
так что это должен быть ключ, который вы ищете внутри массива $Main_Arr_w_Nums
,
array_key_exists($selectedKeysFromMain_Arr_w_Nums[$j], $Main_Arr_w_Nums);
Проблема в том, что ваш цикл for выполняется 4 раза и в
$allTenKeysCombinations_ARR
у вас просто есть 3 элемента в каждом массиве.
Так что используйте цикл for следующим образом:
for($j=0;$j<3;$j++){ ... }