2013-03-16 116 views
0

我有一個這樣的陣列,它是自動構建的,並且在長度中動態構建。檢查數組值是否從另一個數組值設置PHP?

$arr = array('k1','k2','k3','k4',); 

而且我有一個已經存在的數組$exArr,我怎麼能檢查動態下同這樣做;

if($exArr[$arr[0]][$arr[1]][$arr[2]][$arr[3]]) echo 'IT EXISTS'; 

請記住,動態構建的陣列可能只有一個或多達10個連續的鍵來檢查。

由於

EDIT

爲了更清楚我有一個數組是動態的,但將僅包含值。它可以是任何長度。

動態構建的數組對應於另一個數組的鍵,我需要一種方法來檢查動態構建數組中的所有值是否正確並指向一個值,例如:

$dynamic = array('one', 'two', 'three'); 

$existing = array('one' => array('two' => array('three' => array(true)))); 

以上將評估爲true下面的語句是正確的,

if($existing[$dynamic[0]][$dynamic[1]][$dynamic[2]]) echo 'WOO'; 

我遇到的麻煩的是,動態數組就是這樣!它可能是一個長度或50個。因此,有一個簡單的舊if語句不會在這裏工作。

再次感謝

+0

你試過'in_array'嗎? – tradyblix 2013-03-16 04:45:12

+0

或'count'? http://php.net/manual/en/function.count.php – 2013-03-16 04:45:38

+0

你想檢查存儲在數組中的所有特定值嗎? – kirugan 2013-03-16 04:46:33

回答

1
<?php 
$dynamic = array('one', 'two', 'three'); 

$existing = array('one' => array('two' => array('three' => array(true)))); 

function check($dynamic, $existing) { 
    foreach ($dynamic as $key) { 
     if (!isset ($existing [$key])) { 
        // return false; 
      throw new Exception("{$key}"); 
     } 
     $existing = $existing [$key]; 
    } 
    return true; 
} 

try { 
    check($dynamic, $existing); 
} catch (exception $e) { 
    echo "Invalid! On key: {$e->getMessage()}\n\n"; exit; 
} 

echo "Valid if it gets here!\n\n"; 

$dynamic = array('one', "invalid", 'two', 'three'); 

try { 
    check($dynamic, $existing); 
} catch (exception $e) { 
    echo "Invalid! On key: {$e->getMessage()}\n\n"; exit; 
} 

echo "Valid if it gets here!\n\n"; 

測試:http://eval.in/12819

,可隨時更換擲回假

+0

與此問題的數據應該是在$存在數組中的鍵相同的順序... – Cito 2013-03-16 05:17:57

+0

這太棒了!非常感謝,如果數據的順序不正確,我希望它無論如何返回false!再次感謝。 – Griff 2013-03-16 05:19:28

0

這個搜索通過多維數組鑰匙在你的獨特陣列A.發現的關鍵是存儲在數組C.希望這會有所幫助。

<?php 

$arrayA = array("a", "b", "c", "h", "p"); 

$arrayB = array("a" => array("g" => array("c" => array("d" => "x")))); 
$arrayC = array(); 

function searchKeys($array) { 
    global $arrayA; 
    global $arrayC; 

    foreach ($array as $key => $value) { 

     if (in_array($key, $arrayA)) { 
      $arrayC[] = $key; 
     } 

     if (is_array($value)) { 
       searchKeys($value); 
     } 

    } 
} 

searchKeys($arrayB, $arrayA); 
print_r($arrayC); 
?> 
+0

但是對於這種解決方案,對於每個子陣列,您應該添加一個子排除... – Cito 2013-03-16 05:19:54

+0

我已經更改了代碼以搜索多維領域中的鍵。希望這更適合你。 – Daniel 2013-03-16 06:04:28

+0

我對「全局」變量感到畏懼。你的代碼是成爲迷你類的最佳人選,全局變量是類屬性。 jmho。 Tou甚至可以在方法中鍵入提示傳遞的變量作爲數組,以獲得更美觀的代碼。大聲笑 – keyboardSmasher 2013-03-16 06:16:45

相關問題