php 数组键不存在,但我可以 print_r,所以它确实存在

php array key doesn't exist but I can print_r it, so it does exist

我简化了这段代码以试图说明问题。

此代码表示主数组的第 3 个键或索引不存在,而实际上它确实存在。

我有一个主数组,子数组带有数字。

另一个包含所有键 (1,2,3,4) 的数组

然后我组合从键数组中选取的 3 个键(例如 1、2、3)。

然后使用 3 个键,我从 MAIN 数组中获取数字。

但是因为我知道第三个密钥不存在,所以我的主代码出现了问题。

至少,在这里你可以看到它说 "it doesn't exist"。

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++){ ... }