2010-11-30 3 views
0

Ce problème est probablement trivial pour 99% d'entre vous. Jusqu'à présent, j'ai toujours essayé d'éviter une telle situation, mais maintenant je n'ai pas le choix.PHP & JS problème d'index de tableaux numériques et assoc

For PHP: 
$array = array(); 
$array[5] = 'Element'; 
$array['s_5'] = 'Alternative Element'; 
$array[7] = 'Element2'; 
$array['s_7 '] = 'Alternative Element2'; 

For JS 
var array = new Array(); 
array[5] = 'Element'; 
array['s_5'] = 'Alternative Element'; 
array[7] = 'Element2'; 
array['s_7 '] = 'Alternative Element2'; 

Et maintenant j'ai besoin d'arriver au deuxième élément de tableau. Comment faire? Bien sûr, je pourrais créer une autre table contenant des clés de tableau pour chaque élément, ou utiliser foreach/while et faire une action sur un élément spécifique. Aussi, je peux obtenir le dernier élément de tableau en PHP en utilisant end(), mais y at-il un autre moyen plus rapide d'obtenir un élément spécifique à partir d'un tableau aléatoire (ce qui implique que je ne connais pas les clés et la longueur du tableau)?

Merci de votre aide.

+3

Votre JS est incorrect. Les tableaux sont des listes ordonnées indexées par des nombres. Vous semblez vouloir un objet Javascript qui peut utiliser des identifiants de membres non numériques. - Comme un hachage dans d'autres langues. Les hachages ne sont pas commandés par définition. Mais vous pouvez créer un tableau pour suivre l'ordre dans lequel vous avez ajouté des éléments à votre hachage/objet. –

+0

Il existe des tableaux associatifs ** no ** dans JS. Du tout. Les objets sont ** non ordonnés **. Vous ne pouvez pas mélanger la syntaxe de cette façon. –

Répondre

1

Vous pouvez utiliser un tableau 2 dimensions à la place:

$matrix = array(); 
$matrix['elements'] = array(); 
$matrix['alt_elements'] = array(); 

$matrix['elements'][5] = 'Element'; 
$matrix['alt_elements'][5] = 'Alternative Element'; 

... etcetera

Évitez d'utiliser des tableaux associatifs dans JS. Utilisez les tableaux uniquement lorsque les clés sont numériques. Sinon, utilisez des objets.

var matrix = {}; 
matrix.elements = []; 
matrix.altElements = []; 

matrix.elements[5] = 'Element'; 
matrix.altElements[5] = 'Alternative Element'; 
0

tableaux Associatif (php) ou objets (js) ne sont pas destinés à être accesed par index numérique. Cela inclut l'accès au n-ème élément.

Si vous avez vraiment à le faire, il n'y a pas de bon moyen sauf itérer sur le tableau en utilisant foreach($arr as $key => $val) en php ou for(var key in obj) en js et en comptant les éléments manuellement. Cependant, si vos tableaux ressemblent à une matrice, vous pouvez créer deux matrices ou faire de l'élément le plus interne un tableau de sorte que vous ayez des tableaux numériques simples pour la matrice réelle et seulement pour les données à l'intérieur d'autre chose.