phpInfo.netLes ArchivesLes éléPHPants

  
  Accueil
  Trucs & Astuces
  Scripts
  Regex
  Annuaire
  Articles

.
      
 Astuces   PHP  Tableaux


Intersection dans un tableau multidimensionnel[30-08-2002]
Posté par christian

<?php

function inter_tablemultidimension($mon_tab) {
  foreach (
$mon_tab as $k=>$v) {
    if (!
is_array ($tab_res)) {
      
$tab_res = $v;
    }
    
$tab_res = array_intersect($tab_res,$v);
  }  
  return
$tab_res;
}

// ----------------------------------------
// exemple d'utilisation :
// ----------------------------------------

$tab[0][0]= 2;
$tab[0][1]= 5;
$tab[0][2]= 4;

$tab[1][0]= 2;
$tab[1][1]= 4;

$tab[2][0]= 4;
$tab[2][1]= 2;

$tab[5][0]= 2;
$tab[5][1]= 4;
$tab[5][2]= 2;

$intersection = inter_tablemultidimension($tab);

print_r($intersection);

// -----------------------------------------
// résultat :
// Array ( [0] => 2 [2] => 4 )
?>


Ordonner un ou des tableaux[30-06-2002]
Posté par Alexis

Imaginons d'abord que l'on dispose de 3 tableaux (unidimentionnels) : $tab1, $tab2, $tab3, ayant des indices correspondant. Nous souhaitons tous les ordonner suivant $tab1.

<?php
$tab1_2
= $tab1;
asort($tab1_2); //on connait ainsi les indices futurs à respecter

/* asort trie le tableau suivant l'ordre alphabétique en conservant la
corrélation index <-> valeur. arsort est utilisable pour trier suivant
l'ordre alphabétique inverse */

//on place tous les indices dans un tableau
function find_cle($tab){
  global
$tab_cle;
  
$i=1;
  while(list(
$cle,$val) = each($tab)){
    
$tab_cle[$i] = $cle;
    
$i++;
  }
}

find_cle($tab1_2);

function
classer($tableau){
  global
$tab_cle;

  
$i=1;
  while (
$i <= count($tab_cle)){
    
$cle = $tab_cle[$i];
    
$tableau2[$i] = $tableau[$cle];
    
$i++;
  }

  return
$tableau2;
}

//on reclasse tous les tableaux
$tab1 = classer($tab12);
$tab2 = classer($tab2);
$tab3 = classer($tab3);
?>


[1 commentaire]

Valeurs uniques dans un tableau[19-06-2002]
Posté par johann

Cette fonction permet de savoir si toutes les valeurs d'un tableau sont différentes.

<?php
function distinct($tableau)
{
  
$sans_doublons=array_unique($tableau);

  if (
array_count_values($sans_doublons)==array_count_values($tableau))
  {
    
// Les deux tableaux ont la même taille
    
return true;
  }
  else
  {
    
// Les deux tableaux sont de tailles différentes
    // il y a donc des doublons
    
return false;
  }
}
?>


Déplacement d'une valeur dans un tableau[30-04-2002]
Posté par dge77

Cette fonction sert à déplacer un élément au sein d'un tableau à une dimension...

<?php
function deplace_element ($tab_avant,$indice_avant,$indice_apres)
{       
    
//on sort la valeur à déplacer du tableau
    
$agarder= array_splice($tab_avant,($indice_avant),1);

    
//on parcourt le "nouveau" tableau et on dépile tout les élément jusqu'à la
    //position d'insertion
    
$v=0;
    while (
$v>-1)
    {
        if(
$v!=$indice_apres)
            
$tab_temp[]=array_shift($tab_avant);
        else
            break;
//position d'insertion,on sort de la boucle
        
$v++;
    }

    
//on insére l'élément à sa nouvelle place
    
array_unshift($tab_avant,$agarder[0]);

    
//on ré-empile le début du tableau
    
$tab_apres = array_merge($tab_temp,$tab_avant);

    
//on retourne le nouveau tableau
    
return($tab_apres);
    }
?>

Elle s'utilise comme suit :

<?php
$tableau
=array('p','h','n','p','i','f','o');

$retour=deplace_element($tableau,2,4);

echo
"avant : ";
foreach(
$tableau as $val)
    echo
"$val";
echo
"<br>Aprés : ";
foreach(
$retour as $val)
    echo
"$val";

?>


[1 commentaire]

Code source PHP d'un tableau[17-02-2002]
Posté par Nicolas Bigot

Voici une fonction qui retourne le code source php d'un tableau.

En plus de permettre d'afficher le contenu d'un tableau tel que le font les fonctions var_dump et print_r, cette fonction génère un texte qui est directement interprètable par php.

A quoi ca sert ?
Ca sert par exemple à mettre des résultats en cache disque.
je m'en sers pour mettre dans un tableau une partie de l'arboressance du disque dur.

Dans le fichier script un comparatif des affichages avec différentes fonctions est affiché.
Seule la fonction Array2PHP est utile.

Exemple:

<?
if (file_exists('fichier_cache.php'))
{
  include_once
'fichier_cache.php';
}
else
{
  
$montableau = mafonction();
  
$fp = fopen('fichier_cache.php', "wb");
  
fwrite($fp, "<?\n".'$montableau = '.Array2PHP($montableau).";\n?>");
  
fclose($fp);
}
?>
<html>
<body>
<pre>
<?

$aaa
= array(
        
'path'   => 'D:\\Program Files\\EasyPHP\\www\\aaa\\bbb\\',
        
'title'  => 'zogzog',
        
'number' => 42,
        
'bidul'  => array('aa'),
        
'truc'   => array('en' => "Dog", 'fr' => "Chien"),
);

//-------------------------------------------------------------

// retourne le code source php d'un tableau
Function Array2PHP($myarray, $tabcount = 1)
{
        while (
$ptr = each ($myarray))
        {
                if (
strlen($res))
                        
$res .= ",\n";
                for (
$i = 0; $i < $tabcount; $i++)
                        
$res .= "\t";
                
$res .= "'".addslashes($ptr[0])."' => ";
                if (
is_array($ptr[1]))
                        
$res .= Array2PHP($ptr[1], $tabcount + 1);
                elseif (
is_string($ptr[1]))
                        
$res .= "'".addslashes($ptr[1])."'";
                elseif (
is_numeric($ptr[1]))
                        
$res .= $ptr[1];
                elseif (
is_null($ptr[1]))
                        
$res .= 'NULL';
                else
                        
$res .= "#UnknowType";
        }
        return
"array(\n".$res.")";
}
//-------------------------------------------------------------

echo '<font color = blue>version code source réutilisable';
echo
'<br>&nbsp;<br>';
echo
'$tableau = '.Array2PHP($aaa).';';
echo
"\n</font><br>&nbsp;<br><hr><br>Avec var_dump()<br>\n";
var_dump($aaa);
echo
"\n<br><hr><br>Avec print_r()<br>\n";
print_r($aaa);
?>
</pre>
</body>
</html>


FOREACH et tableaux multidimensionnels[17-02-2002]
Posté par Lorenzo Lorenzo

foreach remplace avantageusement les reset/next/key/pos de PHP3.
Cette fonction permet de lister le contenu de n'importe quel tableau SANS AUCUNE limitation (multidimensionnel ou autre) avec un affichage lisible qui permet au 1er coup d'oeil de reconnaitre les niveaux.

-------- LA FONCTION ---------
<?
function aff_tab($tab){
    echo
"<ul>";
    foreach(
$tab AS $clé => $val){
        if( !
is_array($val) ){
            echo
"<li>[$clé] => $val";
        }else{
            echo
"<li>[$clé] => ";
            
aff_tab($val);
        }
    }
    echo
"</ul>";
}
?>

-------- EXEMPLE ---------
<?
$c
=array('x','y','z');
$b=array('a','b','c',$c);
$a=array(1,2,3,4,$b,6);

aff_tab($a);
?>

-------- AFFICHE ---------
  • [0] => 1
  • [1] => 2
  • [2] => 3
  • [3] => 4
  • [4] =>
    • [0] => a
    • [1] => b
    • [2] => c
    • [3] =>
      • [0] => x
      • [1] => y
      • [2] => z


  • [5] => 6


Tableau multidimensionnel[09-12-2001]
Posté par Graphys

En travaillant sur un projet j'ai mis au point des tableaux multidimensionnels (que moi j'appelle "croisés") et je me suis dit que cela pouvait servir à d'autres.

Si vous débutez cela vous aidera à percevoir que l'on peut imbriquer des boucles FOR les unes dans les autres :

<?
$abscisse
= array('','A','B','C','D');
$ordonnee = array('1','2','3');
$contenu = array('cyan','magenta','jaune','noir');

print(
"<table border='1'>");

for(
$x=0; $x<=1+3; $x++)
{
    print(
"<td>$abscisse[$x]</td>");
}

for(
$y=0; $y<=2; $y++)
{
    print(
"<tr><td>$ordonnee[$y]</td>");
    for(
$z=0; $z<=3; $z++)
    {
        print(
"<td>$contenu[$z]</td>");
    }
    print(
"</tr>");
}

?>

Cela donne concrètement un tableau avec :

- en haut : les têtes de colonnes A,B,C,D
- à gauche : les têtes de lignes 1,2,3
- dans les cases : les "CMJN répartis..."

Les variables dynamiques "tableaux"[09-09-2001]
Posté par Frédéric Bouchery

En utilisant les variables dynamiques pour manipuler des tableaux, vous risquez d'avoir des surprises.

Exemple :

<?
$f
= 'une variable quelconque';
$n = 'une autre variable quelconque';
$fruits = array('fraise','orange');
$animaux = array('chien','chat');

$tablo = 'fruits';
// je veux le premier fruit
echo $$tablo[0].'<br>';
// je veux le 2ème animal
$tablo = 'animaux';
echo $
$tablo[1];
?>

Résultat :

  une variable quelconque
une autre variable quelconque
En effet, il est bon de savoir que lorsque l'on écrit : $chaine[2], cela correspond au caractère 3 de la chaîne (la première lettre commence à 0).
Donc dans le premier "echo", on ne demande pas la variables $fruits[0], mais la variables $f, et idem pour le deuxième "echo" où l'on demande $n et pas $animaux[1].

Alors, comment résoudre ce problème ? Il existe 2 solutions :
1) Les références

<?
// [...]
$tablo = 'fruits';
$ref = &$$tablo;
echo
$ref[0].'<br>';
$tablo = 'animaux';
$ref = &$$tablo;
echo
$ref[1];
?>

$ref "pointant", dans le premier cas, sur la variable $fruits et donc $ref[0] nous donne le premier fruit de la liste ("fraise")

2) Les accolades
En fait, les développeurs de PHP ont pensé à tout : Il faut utiliser les accolades

<?
//[...]
$tablo = 'fruits';
echo ${
$tablo}[0].'<br>';
$tablo = 'animaux';
echo ${
$tablo}[1];
?>

Remarque : Dans le cas d'un attribut de classe, il faut écrire :
$this -> {$tablo}[1];

[2 commentaires]

Afficher un tableau multi-dimensionnel[21-05-2001]
Posté par Thomas Dubois

Petite astuce assez pratique pour le débuggage quand on utilise des tableaux, compliqués ou non.

Il s'agit d'une petite fonction récursive qui va afficher entièrement n'importe quel tableau multi-dimensionnel.

<?
function show_array($array)
{
    for (
reset($array); $key = key($array), $pos = pos($array); next($array))
    {
    if(
is_array($pos))
    {
        echo
"$key : <UL>";
        
show_array($pos);
        echo
"</UL>";
    }
    else
        echo
"$key = $pos <BR>";
    }
}
?>


[8 commentaires]

foreach et PHP4[09-11-2000]

PHP4 permet maintenant d'utiliser l'instruction foreach de cette manière :

- Pour les tableaux associatifs :

<?
$tableau
= Array("couleur" => "Bleu", "langage" => "PHP");

foreach (
$tableau as $cle => $valeur)
  echo
"$cle => $valeur<BR>";
?>

- Pour les tableaux 'classiques' :

<?
$tableau
= Array("Bleu","PHP");

foreach (
$tableau as $valeur)
  echo
"$valeur<BR>";
?>


Inverser les valeurs d'un tableau[21-05-2000]

PHP 3.0 ne possède pas de fonction reverse comme c'est le cas de Perl, pour inverser une liste de valeurs (elle existe maintenant dans PHP4 depuis la beta 3 : array_reverse). Nous disposons de la fonction rsort pour effectuer un tri inversé, mais elle ne répond pas forcément au besoin.

Voici une fonction inverser en PHP :

<?
function inverser( &amp;$tableau ) {
  for(
$i = 0; $i &lt; sizeof($tableau,1); $i++)
    
$newTableau[$i] = $tableau[ sizeof($tableau) - $i - 1];

  
$tableau = $newTableau;
}
?>

L'appel de la fonction se fait ainsi :

<?
  $tVals
= Array(98, 45, 147);
  
inverser( $tVals );
?>


[1 commentaire]

Supprimer les doublons dans un tableau[21-05-2000]

Pour supprimer les doublons dans un tableau, vous pouvez utiliser la fonction suivante :

<?
function ValeursUniques($tableau) {

  
// On récupère les mêmes valeurs dans 1 seule case
  
for ($i = 0, $n = count($tableau); $i < $n; $i++)
    
$uTableau[$tableau[$i]] = 1;

  
// On crée le nouveau tableau
  
reset($uTableau);
  for (
$i = 0, $n = count($uTableau); $i < $n; $i++) {
    
$tUnique[] = key($uTableau);
    
next($uTableau);
  }
  return
$tUnique;
}

$tVals = Array(5, 3, 5, 1, 8, 3, 5, 1, 3, 2, 2, 9, 1);
$tVals = ValeursUniques($tVals);

for (
$cpt=0; $cpt < count($tVals); $cpt++)
  echo
$tVals[$cpt]." ";
?>


[2 commentaires]

Parcourir un tableau[10-05-2000]

Voici 2 scripts pour parcourir un tableau quand on ne connait ni la nature des clés (numériques ou chaînes) ni le nombre de valeurs.

<?
reset
($tableau);
while (list(
$cle,$valeur) = each($tableau))
  echo
"$cle = $valeur<BR>\n";
?>

ou

<?
reset
($tableau);
while (
$nuplet = each($tableau))
  echo
$nuplet[0] . " = " . $nuplet[1] . "<BR>\n";
?>


[1 commentaire]

Synseo