2016-07-29 67 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; 
}