2012-05-04 6 views
2

Vous ne savez pas exactement comment nommer correctement ce problème, mais cela implique un besoin de boucler tout tableau imbriqué dans le tableau, qui peut également être un élément de n'importe quel autre tableau - et ainsi de suite. Initialement, je pensais qu'il était nécessaire de marquer les tableaux qui n'ont pas encore été mis en boucle et qui doivent faire une boucle dans le tableau "base" complètement (bien qu'on ait appris que ce n'est pas nécessaire et que PHP le fait arbitrairement) . Le problème semble un peu particulier - la fonction trouvera la valeur imbriquée dans le tableau n'importe où si le claus conditionnel pour tester si la valeur n'est pas trouvée est omis, et vice versa. Quoi qu'il en soit, la fonction est comme suit:Tableau multidimensionnel en boucle PHP

function loop($arr, $find) { 
    for($i=0;$i<count($arr);$i++) { 
    if($arr[$i] == $find) { 
     print "Found $find"; 
     return true; 
    } else { 
     if(is_array($arr[$i])) { 
     $this->loop($arr[$i], $find); 
     } else { 
     print "Couldn't find $find"; 
     return false; 
     } 
    } 
    } 
} 
+0

Avez-vous fatigué 'foreach'? – Tibor

+0

Quelle est la question, s'il vous plaît? – shadyyx

+0

@Tibor, en utilisant 'foreach' est plus lent qu'en utilisant' for', ce qui n'est pas pertinent avec les petits tableaux mais avec les tableaux multiniveaux (et surtout les grands) il y aura une différence de vitesse ... – shadyyx

Répondre

1

Peut-être que vous devriez changer votre code à quelque chose comme:

var $found = false; 
function loop($arr, $find) { 
    foreach($arr as $k=>$v){ 
    if($find==$v){ 
     $this->found = true; 
    }elseif(is_array($v)){ 
     $this->loop($v, $find); 
    } 
    } 
    return $this->found; 
} 
0

Cela a travaillé pour moi pendant un certain temps.

function array_search_key($needle_key, $array) { 
    foreach($array AS $key=>$value){ 
    if($key == $needle_key) return $value; 
    if(is_array($value)){ 
     if(($result = array_search_key($needle_key,$value)) !== false) 
     return $result; 
    } 
    } 
    return false; 
} 
0

OK, qu'en une légère modification:

function loop($arr, $find) { 
    for($i=0;$i<count($arr);$i++) { 
     if(is_array($arr[$i])) { 
      $this->loop($arr[$i], $find); 
     } else { 
      if($arr[$i] == $find) { 
       print "Found $find"; 
       return true; 
      } 
     } 
    } 
    return false; 
} 

Hmm?

Questions connexes