Discussion:
Peut-on mettre une array à plusieurs indices comme paramètre à une fonction ?
(trop ancien pour répondre)
Jean Francois Ortolo
2014-07-06 20:34:20 UTC
Permalink
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
Olivier Miakinen
2014-07-06 21:44:49 UTC
Permalink
Bonjour,
Post by Jean Francois Ortolo
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'.
Post by Jean Francois Ortolo
[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;
}
Post by Jean Francois Ortolo
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);
}
Post by Jean Francois Ortolo
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
Jean Francois Ortolo
2014-07-07 07:08:24 UTC
Permalink
Post by Olivier Miakinen
Bonjour,
Post by Jean Francois Ortolo
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'.
Post by Jean Francois Ortolo
[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($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;
}
Post by Jean Francois Ortolo
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.
for($i = 0; $i < 20; $i++)
{
parcours($tmp_array[$i], 5);
}
for($i = 0; $i < 20; $i++)
{
$sub_array = $tmp_array[$i];
parcours($sub_array, 5);
}
Post by Jean Francois Ortolo
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
Olivier Miakinen
2014-07-07 15:42:59 UTC
Permalink
Post by Jean Francois Ortolo
[copie intégrale]
:-(
Post by Jean Francois Ortolo
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.
Otomatic
2014-07-07 16:21:37 UTC
Permalink
Post by Olivier Miakinen
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
Loading...