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

时间:2015-04-20 19:08:54

标签: php arrays exists not-exists

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

此代码表示主数组的第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>';
    }
}

3 个答案:

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