Décomposer un tableau

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Décomposer un tableau

par djtec » 15 févr. 2009, 14:06

En faites le premier foreach me donne cela mais je vais voir pour changer ce truc.

Merci Hywan....

++

par Hywan » 15 févr. 2009, 14:04

Le fait que tu répètes plusieurs fois la même donnée, ici le nom du dossier. Il faut construire un arbre de cette façon :

Code : Tout sélectionner

root / \ length directory / | \ file1 file2 file3
, c'est le mieux. C'est correct structurellement parlant, et tu n'auras pas autant de problème.

par djtec » 15 févr. 2009, 13:58

Bonjour Hywan,

Il vient d'un fichier externe au serveur.
Mais qu'est ce qu'il a de mal construit ce array?

par Hywan » 15 févr. 2009, 13:25

Hey :),

J'ai une question pour ma part : d'où vient le tableau que tu manipules ? Il est mal construit et ta question en est la preuve. Peut-être que l'on peut saisir le problème en amont ?

par djtec » 15 févr. 2009, 03:03

Merci thehawk grâce à toi j'ai trouvé.

Voici mon code:
<?php

$array = array(
	array('length' => 6144, 'path' => array(0 => 'dossier 1', 1 => 'fichier 1')),
	array('length' => 6144, 'path' => array(0 => 'dossier 1', 1 => 'fichier 2')),
	array('length' => 6144, 'path' => array(0 => 'dossier 2', 1 => 'fichier 1')),
	array('length' => 6144, 'path' => array(0 => 'dossier 2', 1 => 'fichier 2')),
	array('length' => 6144, 'path' => array(0 => 'fichier 1')),
	array('length' => 6144, 'path' => array(0 => 'fichier 2'))
);

foreach($array as $key => $value) {
    if (isset($value["path"][1])) {
    	$return[$value["path"][0]][] = $value["path"][1].' || '.$value['length'];
    } else {
		$return["file"][] = $value["path"][0].' || '.$value['length'];
    }
}

foreach($return as $key => $value) {
	$count = count($value);
	
	echo '<ul>';
	
	if($key == "file") {
		for($i = 0; $i < $count; $i++) {
			echo '<li>'.$value[$i].'</li>';
		}
	} else {
		echo '<li>'.$key.'</li>';
		echo '<ul>';
	
		for($i = 0; $i < $count; $i++) {
			echo '<li>'.$value[$i].'</li>';
		}
	
		echo '</ul>';
	}
	echo '</ul>';
}

?>
En faites je n'aurais jamais trouvé seul.
Part contre je sais pas si c'est le mieux mais cela fonctionne.
Mais je voudrais juste savoir s'il il y un moyen plus court.

par thehawk » 14 févr. 2009, 23:31

je serais tenter de t'orienter sur :
foreach($array as $key => $value)
{
	if (isset($value["path"][1]))
	{
	$return[$value["path"][0]][] = $value["path"][1].' || '.$value['length'];
	}
	else
	{
			$return[$value["path"][0]][] = $value["path"][0].' || '.$value['length'];
	}

}
echo "<pre>";
print_r($return);
echo "</pre>";
A toi de l'adapter a ta mise en forme, j'ai fait exprès de ne pas te donner tous le code , que tu regarde comment ca marche ou en tout cas si cela ne te correspond pas la procédure a toi d'adapter
Bye Hawk

Décomposer un tableau

par djtec » 14 févr. 2009, 21:57

Bonsoir,

Voilà j'ai un array qui se compose comme ceci:
<?php

$array = array(
	array('length' => 6144, 'path' => array(0 => 'dossier 1', 1 => 'fichier 1')),
	array('length' => 6144, 'path' => array(0 => 'dossier 1', 1 => 'fichier 2')),
	array('length' => 6144, 'path' => array(0 => 'dossier 2', 1 => 'fichier 1')),
	array('length' => 6144, 'path' => array(0 => 'dossier 2', 1 => 'fichier 2')),
	array('length' => 6144, 'path' => array(0 => 'fichier 1')),
	array('length' => 6144, 'path' => array(0 => 'fichier 2'))
);

?>
J'ai fais ce script:
<?php

echo '<ul>';

foreach($array as $file) {
	$list = '';
	$size = $file["length"];
	$count = count($file["path"]);
			
	for($i = 0;  $i < $count; $i++) {
		if(($i + 1) == $count) {
			$list .= '<li>'.$file["path"][$i].' || '.$size.'</li>';
		} else {
			$list .= '<li>'.$file["path"][$i].'</li>';
		}
	}
			
	echo $list;
}

echo '</ul>';

?>
Mais voilà ce script me sort ceci:
* dossier 1
* fichier 1 || 6144
* dossier 1
* fichier 2 || 6144
* dossier 2
* fichier 1 || 6144
* dossier 2
* fichier 2 || 6144
* fichier 1 || 6144
* fichier 2 || 6144

Hors que j'aimerais qu'il me sorte:
* dossier 1
o fichier 1 || 6144
o fichier 2 || 6144

* dossier 2
o fichier 1 || 6144
o fichier 2 || 6144

* fichier 1 || 6144
* fichier 2 || 6144

Mais là je suis perdu je cherche mais je ne trouve pas comment faire, j'ai essayé du coté de array_unique() mais ca fonctionne pas.

Merci d'avance...