我简化了此代码以试图说明问题。
此代码表示主数组的第3个键或索引在实际存在时不存在。
我有一个带有数字的子数组的MAIN数组。
另一个包含所有键(1,2,3,4)的数组
然后我做了从键阵列中挑选的3个键(例1,2,3)的组合。
然后使用3个键,我从MAIN数组中获取数字。
但是因为我知道第三把钥匙不存在,所以它给我的主要代码带来了问题。
至少,在这里你可以看到它说'#34;它不存在"。
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>';
}
}
答案 0 :(得分:2)
我认为问题在于:
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))
答案 1 :(得分:1)
从我所看到的,您正在寻找$ j,这不是您稍后使用的数组键,在数组值内,而不是完整数组。
您的密钥,从下一行开始被声明为$selectedKeysFromMain_Arr_w_Nums[$j]
,因此该密钥应该是您在数组$Main_Arr_w_Nums
中查找的密钥。
array_key_exists($selectedKeysFromMain_Arr_w_Nums[$j], $Main_Arr_w_Nums);
答案 2 :(得分:0)
问题是你的for循环运行了4次并且在
中$allTenKeysCombinations_ARR
每个阵列中只有3个元素。
所以使用for循环如下:
for($j=0;$j<3;$j++){ ... }