Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Peut-on mettre une array à plusieurs indices comme paramètre à une fonction ?

4 réponses
Avatar
Jean Francois Ortolo
Bonjour

Ma question est simple, je l'ai déjà testé, mais j'aurais besoin de
savoir si c'est portable en PHP 5 toutes versions, et après ( PHP 6 ? ).

Sachant une fonction prenant en paramètre une array ( théoriquement à
un indice ), est-il possible de la lancer avec en paramètre, une array à
deux indices, dont l'indice le plus profond est initialisé ?

Par exemple :

[code]
<?php

function parcours($tmp, $nbre)
{
for($i = 0; $i < $nbre; $i++)
{
echo "\t" . $tmp[$i];
}

echo "\n";

return(true);
}

$tmp_array = array();

for($i = 0; $i < 20; $i++)
{
for($j = 0; $j < 5; $j++)
{
$tmp_array[$i][$j] = 500 * $i + $j;
}
}

for($j = 0; $j < 5; $j++)
{
parcours($tmp_array[$j], 5);
}

exit;
?>
[/code]


Je sais que sur mon ordinateur çà marche ( PHP 5.5.14 sous Linux
Fedora 20 64 bits ), mais, est-ce que cette façon de faire fonctionne au
moins en PHP 5+ , et fonctionnera dans le futur ?

Merci beaucoup de vos réponses.

Respectueusement.

Jean François Ortolo

4 réponses

Avatar
Olivier Miakinen
Bonjour,

Le 06/07/2014 22:34, Jean Francois Ortolo a écrit :

Ma question est simple, je l'ai déjà testé, mais j'aurais besoin de
savoir si c'est portable en PHP 5 toutes versions, et après ( PHP 6 ? ).

Sachant une fonction prenant en paramètre une array ( théoriquement à
un indice ), est-il possible de la lancer avec en paramètre, une array à
deux indices, dont l'indice le plus profond est initialisé ?



Noter qu'un 'array à deux indices' est un 'array à un indice' dont
chaque élément est lui-même un 'array à un indice'.

Par exemple :

[code]
<?php

function parcours($tmp, $nbre)
{
for($i = 0; $i < $nbre; $i++)
{
echo "t" . $tmp[$i];
}

echo "n";

return(true);
}

$tmp_array = array();

for($i = 0; $i < 20; $i++)
{
for($j = 0; $j < 5; $j++)
{
$tmp_array[$i][$j] = 500 * $i + $j;
}
}



Sauf erreur, ceci est équivalent à :

for($i = 0; $i < 20; $i++)
{
$sub_array = array();
for($j = 0; $j < 5; $j++)
{
$sub_array[$j] = 500 * $i + $j;
}
$tmp_array[$i] = $sub_array;
}



for($j = 0; $j < 5; $j++)
{
parcours($tmp_array[$j], 5);
}



Ceci est correct, bien sûr, mais ton utilisation de la variable $j
au lieu de $i, et de la boucle de 0 à 4 au lieu de 0 à 19, laisse
supposer que ça ne va pas faire ce que tu crois.

Une exploration complète serait plutôt :

for($i = 0; $i < 20; $i++)
{
parcours($tmp_array[$i], 5);
}

Et c'est à peu près la même chose que :

for($i = 0; $i < 20; $i++)
{
$sub_array = $tmp_array[$i];
parcours($sub_array, 5);
}


exit;
?>
[/code]


Je sais que sur mon ordinateur çà marche ( PHP 5.5.14 sous Linux
Fedora 20 64 bits ), mais, est-ce que cette façon de faire fonctionne au
moins en PHP 5+ , et fonctionnera dans le futur ?

Merci beaucoup de vos réponses.

Respectueusement.

Jean François Ortolo


Avatar
Jean Francois Ortolo
Le 06/07/2014 23:44, Olivier Miakinen a écrit :
Bonjour,

Le 06/07/2014 22:34, Jean Francois Ortolo a écrit :

Ma question est simple, je l'ai déjà testé, mais j'aurais besoin de
savoir si c'est portable en PHP 5 toutes versions, et après ( PHP 6 ? ).

Sachant une fonction prenant en paramètre une array ( théoriquement à
un indice ), est-il possible de la lancer avec en paramètre, une array à
deux indices, dont l'indice le plus profond est initialisé ?



Noter qu'un 'array à deux indices' est un 'array à un indice' dont
chaque élément est lui-même un 'array à un indice'.

Par exemple :

[code]
<?php

function parcours($tmp, $nbre)
{
for($i = 0; $i < $nbre; $i++)
{
echo "t" . $tmp[$i];
}

echo "n";

return(true);
}

$tmp_array = array();

for($i = 0; $i < 20; $i++)
{
for($j = 0; $j < 5; $j++)
{
$tmp_array[$i][$j] = 500 * $i + $j;
}
}



Sauf erreur, ceci est équivalent à :

for($i = 0; $i < 20; $i++)
{
$sub_array = array();
for($j = 0; $j < 5; $j++)
{
$sub_array[$j] = 500 * $i + $j;
}
$tmp_array[$i] = $sub_array;
}



for($j = 0; $j < 5; $j++)
{
parcours($tmp_array[$j], 5);
}



Ceci est correct, bien sûr, mais ton utilisation de la variable $j
au lieu de $i, et de la boucle de 0 à 4 au lieu de 0 à 19, laisse
supposer que ça ne va pas faire ce que tu crois.

Une exploration complète serait plutôt :

for($i = 0; $i < 20; $i++)
{
parcours($tmp_array[$i], 5);
}

Et c'est à peu près la même chose que :

for($i = 0; $i < 20; $i++)
{
$sub_array = $tmp_array[$i];
parcours($sub_array, 5);
}


exit;
?>
[/code]


Je sais que sur mon ordinateur çà marche ( PHP 5.5.14 sous Linux
Fedora 20 64 bits ), mais, est-ce que cette façon de faire fonctionne au
moins en PHP 5+ , et fonctionnera dans le futur ?

Merci beaucoup de vos réponses.

Respectueusement.

Jean François Ortolo








Bonjour Monsieur

Je pensais celà aussi, pour les sub-arrays.

Super merci, vous m'ôtez une épine du pieds. ;)

Je me suis aperçu de mon erreur du choix de $j au lieu de $i comme
variable, après avoir posté mon message.

En tout cas, il ne me semble pas que ce problème des sub-arrays comme
paramètre à une fonction, ( et sub-sub-arrays aussi probablement ), soit
mentionné dans le PHP Manual.

Merci beaucoup.

Respectueusement.

Jean François Ortolo
Avatar
Olivier Miakinen
Le 07/07/2014 09:08, Jean Francois Ortolo m'a répondu :
Le 06/07/2014 23:44, Olivier Miakinen a écrit :
[copie intégrale]





:-(

En tout cas, il ne me semble pas que ce problème des sub-arrays comme
paramètre à une fonction, ( et sub-sub-arrays aussi probablement ), soit
mentionné dans le PHP Manual.



Probablement parce que ce n'est pas un problème. À une fonction on passe
des valeurs qui peuvent être des chaînes, des entiers, des tableaux, ou
autre chose, et un tableau a des valeurs qui peuvent être des chaînes,
des entiers, des tableaux ou autre chose. Un tableau peut même avoir un
premier élément qui est un entier, un second élément qui est un tableau
de chaînes, un troisième élément qui est un tableau dont certains sous-
éléments sont des tableaux et d'autres non, et ainsi de suite.

Et donc, si tu passes un à un les éléments de ton tableau de 20 éléments
à une fonction, c'est de ta responsabilité que les éléments soient eux-
mêmes des tableaux à 5 éléments, si ça doit être le cas. Le manuel de
PHP n'a rien de spécial à en dire.
Avatar
Otomatic
Olivier Miakinen <om+ écrivait :

Et donc, si tu passes un à un les éléments de ton tableau de 20 éléments
à une fonction, c'est de ta responsabilité que les éléments soient eux-
mêmes des tableaux à 5 éléments, si ça doit être le cas. Le manuel de
PHP n'a rien de spécial à en dire.


Pour que le nombre d'éléments de premier ou de second niveau ne soient
jamais un problème, j'aurais utilisé deux « foreach » imbriqués.
--
Les gens que l'on considère comme des fous de travail sont, peut-être,
tout simplement entrain de s'amuser. Einstein
Technologie aéronautique - http://aviatechno.net - Les anciens de Vilgénis
FAQ de fr.rec.aviation : http://faq-fra.aviatechno.net
Concorde dans la presse de 1963 à 2003 : http://le-pointu.aviatechno.net