2016-07-29 66 views
1

int值如何檢查多維數組只包含在PHP int值如何檢查多維數組只包含在PHP

有沒有最簡單的進行檢查。

像我有包含int值的陣列,但我必須檢查所有值都在或不

陣列1

$RoomGuests = array(
         array(
         "NoOfAdults"=> 2, 
         "NoOfChild"=>0, 
         ), 
         array(
         "NoOfAdults"=> 3, 
         "NoOfChild"=>2, 
         "ChildAge"=> array(12,11) 
         ), 
         array(
         "NoOfAdults"=> 3, 
         "NoOfChild"=>1, 
         "ChildAge"=> array(11) 
         ) 
        ); 

以上陣列僅包含int值那麼它是真正

數組2

$RoomGuests2 = array(
         array(
         "NoOfAdults"=> "two", 
         "NoOfChild"=>0, 
         ), 
         array(
         "NoOfAdults"=> "three", 
         "NoOfChild"=>"two", 
         "ChildAge"=> array(12,11) 
         ), 
         array(
         "NoOfAdults"=> 3, 
         "NoOfChild"=>1, 
         "ChildAge"=> array(11) 
         ) 
        ); 

以上陣列不包含int值那麼

ARRAY3

$RoomGuests3 = array(
        array(
        "NoOfAdults"=> 2, 
        "NoOfChild"=>0, 
        ), 
        array(
        "NoOfAdults"=> 3, 
        "NoOfChild"=>2, 
        "ChildAge"=> array(12,11) 
        ), 
        array(
        "NoOfAdults"=> 3, 
        "NoOfChild"=>1, 
        "ChildAge"=> array(
         "NoOfAdults"=> 3, 
         "NoOfChild"=>1, 
         "ChildAge"=> array(11,'k') 
         ) 
        ) 
       ); 

回答

2

它可以幫助你

var_dump(is_IntArray($RoomGuests)); 
var_dump(is_IntArray($RoomGuests2)); 
var_dump(is_IntArray($RoomGuests3)); 

function is_IntArray($p){ 
    $Result = is_array($p) ? 
      implode('', array_map(__FUNCTION__, array_fill(0, count($p), ''), $p)) : 
      $p; 
    return ctype_digit($Result); 
} 
+1

賓果這個工作在所有條件謝謝@AjayDeepakKumar – User97798

-1

通過使用PHP的功能的GetType可以檢查變量類型。

string gettype (mixed $var) 

返回PHP變量var的類型。對於類型檢查,使用is_ *函數。 所以這裏是一個簡單的例子

<?php 

$data = array(1, 1., NULL, new stdClass, 'foo'); 

foreach ($data as $value) { 
    echo gettype($value), "\n"; 
} 

?> 

它會給你造成這樣的

integer 
double 
NULL 
object 
string 

現在你必須通過兩個循環來讀取你的多維數組,然後

<?php 
$array=array( array(
         "NoOfAdults"=> "two", 
         "NoOfChild"=>0, 
         ), 
         array(
         "NoOfAdults"=> "three", 
         "NoOfChild"=>"two", 
         "ChildAge"=> array(12,11) 
         ), 
         array(
         "NoOfAdults"=> 3, 
         "NoOfChild"=>1, 
         "ChildAge"=> array(11) 
         ) 
        ); 
foreach($array as $arr) { 
     foreach($arr as $k => $a) { 
      echo gettype($a), "\n"; 
     } 
} 
?> 
2

您可以使用一個foreach()循環父數組和array_walk_recursive()函數來檢查孩子。

像這樣:

$RoomGuests2 = array(
     array(
     "NoOfAdults"=> "two", 
     "NoOfChild"=>0, 
    ), 
     array(
     "NoOfAdults"=> "three", 
     "NoOfChild"=>"two", 
     "ChildAge"=> array(12,11) 
    ), 
     array(
     "NoOfAdults"=> 3, 
     "NoOfChild"=>1, 
     "ChildAge"=> array(11) 
    ) 
); 

foreach($RoomGuest2 as $child) { 
     array_walk_recursive($child, 'checkIfInt'); 
} 

function checkIfInt($array, $key) { 
     // If the child array is another array (like "ChildAge"=> array(11)) then check this array. 
     if(is_array($array[$key])) array_walk_recursive($array[$key], 'checkIfInt'); 
     else if(!is_integer($array[$key])) { 
      // If the value it's not a integer, then PHP will execute this code. 
     } 
} 
+1

這是可怕的吹毛求疵我的一部分。如果您希望縮短代碼的長度,匿名函數可以作爲閉包傳遞給'array_walk_recursive',但如果沒有指定'use',它將只能訪問本地作用域。可以說它可能會更好或者更糟,這取決於OP想要如何處理代碼。另外,你並不需要'foreach',因爲它將走遍整個陣列,不管部門。 – Andrew

+0

@Andrew你的意思是,代碼可能是這樣的: 'array_walk_recursive($孩子,函數(){});' 如果是的話,我把代碼中的另一個功能,使代碼更容易理解。 – Syncro

+0

謝謝你已經回答好了。 –

0

爲什麼不乾脆:

function containsOnlyIntegers($array) { 
    foreach($array as $arr) { 
     foreach($arr as $k => $a) { 
      if ($k === 'NoOfAdults' || $k === 'NoOfChild') { 
       if (!is_int($a)) { return false; } 
      } 
     } 
    } 

    return true; 
}