2009-08-04 6 views

Répondre

0

Cela devrait fonctionner. Pourquoi ça ne marche pas? Quel message d'erreur obtenez-vous? Ce est le code que j'utiliserais:

$inArr;//This is the 2D array 
$outArr = array(); 
for($i=0;$i<count($inArr);$i++){ 
     $outArr[$i] = $inArr[$i][0]; 
} 
+1

oh je vois le problème ... peut-être que le i Supernovah

+0

@Supernovah: Chaque variable, dans chaque accès, a besoin du signe $ devant son nom. – lacop

1
// Make sure you have your first array initialised here! 
$array2 = array(); 
foreach ($array AS $item) 
{ 
    $array2[] = $item[0]; 
} 

En supposant que vous voulez avoir le même nom de variable après, vous pouvez ré-attribuer le nouveau tableau de retour à l'ancienne.

$array = $array2; 
unset($array2); // Not needed, but helps with keeping memory down 

En outre, vous pourrez peut-être, en fonction de ce qui est dans le tableau, faites quelque chose.

$array = array_merge(array_values($array)); 
+0

merci pour la réponse, mais je ne veux pas utiliser un autre nom de la variable, en PHP doit écrire après la variable est lue la variable? J'ai pensé? – Supernovah

+0

Oui, cependant, comme vous l'avez fait en boucle, ce serait un peu moins déroutant. En outre, count() est évalué à chaque itération. Alors que vous ajoutez des choses, cela va toujours changer. Il n'y a pas de limite sur le nombre de noms de variables en PHP! vous pouvez toujours l'assigner à la variable d'origine après la boucle (avec $ array = $ array2;) – Mez

+0

J'ai trouvé que vous pouvez faire des changements "en place" dans une boucle foreach si vous faites - foreach ($ myarray as & $ item) – grantwparks

1

Il pourrait y avoir des problèmes si le tableau source n'est pas indexé numériquement. Essayez ceci à la place:

$destinationArray = array(); 
for ($sourceArray as $key=>$value) { 
    $destinationArray[] = $value[0]; //you may want to use a different index than '0' 
} 
+0

Ceci est vrai mais mon tableau est numérique - L'erreur est ma variable auquel je me suis référé sans variable denoter $ – Supernovah

1

Comme indiqué précédemment, votre code ne fonctionnera pas correctement dans diverses situations. Essayez d'initialiser votre tableau avec ces valeurs:

$cond = array(5=>array('4','3'),9=>array('3','4')); 

Une solution, me mieux lisible est aussi le code suivant:

//explain what to do to every single line of the 2d array 
function reduceRowToFirstItem($x) { return $x[0]; } 

// apply the trasnformation to the array 
$a=array_map('reduceRowTofirstItem',$cond); 

Vous pouvez lire le reference for array map pour une explication détaillée.

Vous pouvez également opter pour une légère variation en utilisant array_walk (il fonctionne sur le tableau "en place"). Notez que la fonction ne renvoie pas de valeur et que son paramètre est transmis par référence.

function reduceToFirstItem(&$x) { $x=$x[0]; } 
array_walk($cond, 'reduceToFirstItem'); 
+0

Puisque le code que j'écris est privé je peux être sûr que le tableau sera toujours numérique à partir de zéro sans lacunes. Mais je vous remercie pour l'avis que j'avais en quelque sorte sauté la pensée. – Supernovah

+0

C'était juste pour signaler une source possible de bugs. Si vous pensez que vous ne réutiliserez pas votre code, vous pouvez ignorer le conseil en toute sécurité;) – Eineki

3

Il peut être aussi simple que cela:

$array = array_map('reset', $array); 
Questions connexes