Déplacer une clé dans un tableau multidimensionnel
Déplacer une clé dans un tableau multidimensionnel - PHP - Programmation
MarshPosté le 03-01-2012 à 20:11:28
Salut à tous et bonne année
Je cherche à créer une fonction qui me permettra de déplacer un ensemble clé/valeur au sein d'un tableau multidimensionnel. L'idée c'est de me servir de ces tableaux pour afficher un menu, sans base de données, de manière simple et rapide.
Bref, voici un 1er jet de fonction :
Code PHP :
function array_remove( &$array, $key ) { unset($array[$key]); }
function ModifCurrent ($tab, $current, $way)
{
foreach ($tab as $cle=>$valeur)
{
if (!is_array($valeur))
{
if (($current == $cle) && ($way == 'up')) // Si on l'a trouvé et que on veut le déplacer vers le haut
{
array_remove( $tab, $cle ); // on le détruit
prev($tab); // on remonte
prev($tab); // on remonte une 2e fois
// DEBUG //
$temp = current($tab);
print '<br>Valeur temp : '.$temp.'<br>';
//$tableau[$current] = $valeur;
} else {
print ' '; // non terminé
}
} else {
ModifCurrent ($valeur, $current, $way);
}
} // fin foreach ge
print_r ($tab);
}
// Utilisation
if ((!empty($way)) && (!empty($current))) // ?current=who-owns-the-data&way=up
Mais mon print current ne renvoie rien (vide). J'ai comme l'impression que mon pointeur dans le tableau n'est pas au bon endroit, pourtant il devrait suivre le foreach
Je galère un peu, et j'aurais besoin de votre aide... Merci !
Marsh Posté le 03-01-2012 à 20:11:28
Salut à tous et bonne année
Je cherche à créer une fonction qui me permettra de déplacer un ensemble clé/valeur au sein d'un tableau multidimensionnel.
L'idée c'est de me servir de ces tableaux pour afficher un menu, sans base de données, de manière simple et rapide.
Bref, voici un 1er jet de fonction :
Code PHP :
function array_remove( &$array, $key )
{
unset($array[$key]);
}
function ModifCurrent ($tab, $current, $way)
{
foreach ($tab as $cle=>$valeur)
{
if (!is_array($valeur))
{
if (($current == $cle) && ($way == 'up')) // Si on l'a trouvé et que on veut le déplacer vers le haut
{
array_remove( $tab, $cle ); // on le détruit
prev($tab); // on remonte
prev($tab); // on remonte une 2e fois
// DEBUG //
$temp = current($tab);
print '<br>Valeur temp : '.$temp.'<br>';
//$tableau[$current] = $valeur;
} else {
print ' '; // non terminé
}
} else {
ModifCurrent ($valeur, $current, $way);
}
} // fin foreach ge
print_r ($tab);
}
// Utilisation
if ((!empty($way)) && (!empty($current))) // ?current=who-owns-the-data&way=up
ModifCurrent ($Menu, $current, $way);
// Tableau
$Menu = array
(
'introduction' => array(),
'cloud-computing-in-30-sec' => array(
'what-is-cloud-computing' =>'what-is-cloud-computing',
'types-of-cloud' => 'types-of-cloud',
'why-use-clouds' => 'why-use-clouds'
),
'how-do-clouds-work' => array(
'virtualisation' => 'virtualisation'),
'clouds-in-IT-history' => array (),
'the-big-issues' => array(
'are-clouds-green' => 'are-clouds-green',
'are-clouds-safe' => 'are-clouds-safe',
'where-is-my-data-being-stored' => 'where-is-my-data-being-stored',
'who-owns-the-data' => 'who-owns-the-data'
),
'clouds-and-grids' => array(
'clouds-and-grids-compared' => 'clouds-and-grids-compared',
'cloudy-grids' => 'cloudy-grids',
'future-directions' => 'future-directions'
),
'cloud-powered-projects' => array(),
'fin' => array()
);
Mais mon print current ne renvoie rien (vide).
J'ai comme l'impression que mon pointeur dans le tableau n'est pas au bon endroit, pourtant il devrait suivre le foreach
Je galère un peu, et j'aurais besoin de votre aide... Merci !