2010-05-11 9 views
3

Chaque élément de mon tableau est un tableau d'environ 5 valeurs .. Certains d'entre eux sont en fin numérique « GB » .. J'ai besoin du même tableau mais avec « GB » dépouillée de telle sorte que tout le nombre reste.Étant donné un tableau de tableaux, comment puis-je enlever la sous-chaîne « Go » de chaque valeur?

donc je dois parcourir mon tableau entier, sur chaque sous-réseau prennent chaque valeur et la bande de la chaîne « Go » et de créer un nouveau tableau de la sortie.

Quelqu'un peut-il recommander et méthode efficace de le faire?

Répondre

2

Vous pouvez utiliser array_walk_recursive() pour cela:

array_walk_recursive($arr, 'strip_text', 'GB'); 

function strip_text(&$value, $key, $string) { 
    $value = str_replace($string, '', $value); 
} 

C'est beaucoup moins gênant que de parcourir un tableau avec ses valeurs par référence (correctement).

1

Vous pouvez créer votre propre fonction personnalisée pour parcourir la valeur d'un tableau, vérifier si la sous-chaîne GB existe et, dans l'affirmative, la supprimer. Avec cette fonction, vous pouvez passer le tableau d'origine et la fonction dans array_map

1
$arr = ... 

foreach($arr as $k => $inner) { 
    foreach($inner as $kk => &$vv) { 
     $vv = str_replace('GB', '', $vv); 
    } 
} 

Cela permet en fait les tableaux originaux intacts avec les nouvelles chaînes. (Remarquez &$vv, ce qui signifie que je reçois la variable par référence, ce qui signifie que toute modification $vv dans la boucle affecteront la chaîne réelle, et non en copiant)

1
// i only did the subarray part 
$diskSizes = array("500", "300 GB", "200", "120 GB", "130GB"); 
$newArray = array(); 

foreach ($diskSizes as $diskSize) { 
    $newArray[] = str_replace('GB', '', $diskSize); 


} 

// look at the new array 
print_r($newArray);