2010-12-05 8 views
-1

J'ai un tableau à plusieurs dimensions appelé « soldat »:usort retourne Undefined index

Array 
(
    [0] => Array 
     (
      [name] => Saiga 20k Semi 
      [target] => 100 
      [star] => gold 
     ) 

[1] => Array 
    (
     [name] => SVU Snaiperskaya Short 
     [target] => 85 
     [star] => gold 
    ) 

[2] => Array 
    (
     [name] => Type 88 Sniper 
     [target] => 56 
     [star] => gold 
    ) 

Je suis en train de trier le tableau par la valeur « cible ». J'utilise:

usort($soldier,'compare_target'); 

function compare_target($x,$y) 
{ 
    if($x['target'] == $y['target']) 
    { 
     return 0; 
    } 
    elseif($x['target'] < $y['target']) 
    { 
     return 1; 
    } 
    else 
    { 
     return -1; 
    } 
} 

Mais PHP est de lancer l'erreur suivante: « Undefined index: cible » pour les 2 lignes à l'intérieur de la fonction, des idées?

+1

Essayez de déposer $ x et $ y dans la fonction pour voir où vous en êtes, cela me semble parfait. – RobertPitt

+1

Etes-vous sûr que ce n'est pas un avis PHP? S'il s'agit d'un avis, il peut être évité en vérifiant les variables avec 'isset()' avant de les utiliser. PHP ne renvoie pas d'erreurs sur les index indéfinis, AFAIK. – jwueller

+0

Ça me semble bien ... –

Répondre

4
function compare_target($x,$y) 
{ 
    if (!(isset($x['target']) && isset($y['target']))) 
     return 0; 

    if ($x['target'] == $y['target']) 
     return 0; 
    elseif ($x['target'] < $y['target']) 
     return 1; 
    else 
     return -1; 
} 

Il est toujours mauvais de supposer que quelque chose serait là. Si vous voulez utiliser $x['target'], vous devez d'abord vérifier qu'il est valide ou que vous avez un bug persistant.

+0

cela aurait empêché les erreurs lancées par mes mauvaises données dans le tableau, donc cela fonctionne, merci. – Titan

1

yep désolé les gars j'ai fait un dumping de $ x et $ y dans la fonction comme suggéré et c'était un problème avec certains éléments de tableau dans $ soldat en raison de ma propre faute, je vais supprimer cette question, désolé de gaspiller votre temps!!