2016-07-29 6 views
1

enthalten Wie mehrdimensionales Array zu überprüfen, nur int-Wert in PHP enthaltenWie nur mehrdimensionales Array überprüfen int-Wert in PHP

Gibt es eine einfachste dies zu überprüfen.

Wie ich habe ein Array, die int-Wert enthalten, aber ich habe zu prüfen, ob alle Werte sind oder nicht

Array 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) 
         ) 
        ); 

Above Array nur int-Wert enthalten ist, dann ist es wahr

Array2

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

Above Array nicht int enthaltenen Wert, dann ist es falsch

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') 
         ) 
        ) 
       ); 

Antwort

2

Es kann Ihnen

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

Bingo diese Arbeit in allen Bedingungen Danke @AjayDeepakKumar – User97798

-1

Durch die Verwendung von gettype Funktion von PHP können Sie den Variablentyp überprüfen.

string gettype (mixed $var) 

Gibt den Typ der PHP-Variablen var. Verwenden Sie für die Typprüfung is_ * -Funktionen. ist also hier ein einfaches Beispiel

<?php 

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

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

?> 

, die Sie mögen, dass Sie

integer 
double 
NULL 
object 
string 

Jetzt können dann Schleifen führen geben verwenden, um lesen Sie Ihre mehrdimensionales Array durch zwei

<?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

Sie a foreach(), um das Vater-Array und die array_walk_recursive()-Funktion zu wiederholen, um die Kinder zu überprüfen.

So:

$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

Hilfe meinerseits Das ist schrecklich Spitzfindigkeiten. Eine anonyme Funktion kann als Abschluss an 'array_walk_recursive' übergeben werden, wenn Sie den Code kürzer machen möchten, jedoch nur Zugriff auf den lokalen Bereich, wenn kein' use' angegeben ist. Es kann, je nachdem, was OP mit dem Code machen möchte, besser oder schlechter sein. Auch brauchen Sie nicht wirklich die "foreach", da es die ganze Reihe gehen wird, egal in welcher Abteilung. – Andrew

+0

@ Andrew Haben Sie bedeuten, dass der Code wie folgt sein könnte: 'array_walk_recursive ($ Kind, function() {});' Wenn ja, ich den Code in einer anderen Funktion setzen, um den Code leichter zu verstehen. – Syncro

+0

danke du hast gut geantwortet. –

0

Warum nicht einfach:

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; 
}