Alimenter un array via array_push

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 : Alimenter un array via array_push

Re: Alimenter un array via array_push

par dread » 06 juil. 2010, 17:39

Merci beaucoup pour tous ces éléments que je vais m'empresser de tester.

Je pense que ça ira pour la compréhension. J'ai plus un problème de connaissance dans les fonctions existantes et qui peuvent m'aider.

Merci encore.

Re: Alimenter un array via array_push

par stealth35 » 06 juil. 2010, 14:08

sinon on peux faire ca avec array_merge_recursive
$resultsBdd = array(
  array('id_atelier'=>1, 'categ_id'=>1),
  array('id_atelier'=>2, 'categ_id'=>4),
  array('id_atelier'=>3, 'categ_id'=>2),
  array('id_atelier'=>4, 'categ_id'=>1),
  array('id_atelier'=>5, 'categ_id'=>4)
);

$resultsPhp = array('categ'=>array(),'atelier'=>array());

foreach($resultsBdd as $line)
{
	$resultsPhp['categ'][] = $line['categ_id'];
	$resultsPhp['atelier'] = array_merge_recursive($resultsPhp['atelier'], array(':' . $line['categ_id'] => $line['id_atelier']));
}

$resultsPhp['categ'] 	= array_values(array_unique($resultsPhp['categ']));
$resultsPhp['atelier'] 	= array_values($resultsPhp['atelier']);

print_r($resultsBdd);
print_r($resultsPhp);

Re: Alimenter un array via array_push

par jojolapine » 06 juil. 2010, 13:35

Ah autant pour moi, il faut rajouter une petit test:
  // si l'atelier n'est pas encore enregistré
  if(!isset($resultsPhp['atelier'][$cat_key]) || !in_array($line['id_atelier'],$resultsPhp['atelier'][$cat_key])){
    $resultsPhp['atelier'][$cat_key][]=$line['id_atelier'];
  }

Re: Alimenter un array via array_push

par stealth35 » 06 juil. 2010, 13:32

Et hop!
$resultsBdd = array(
  array('id_atelier'=>1, 'categ_id'=>1),
  array('id_atelier'=>2, 'categ_id'=>4),
  array('id_atelier'=>3, 'categ_id'=>2),
  array('id_atelier'=>4, 'categ_id'=>1),
  array('id_atelier'=>5, 'categ_id'=>4)
);

$resultsPhp = array('categ'=>array(),'atelier'=>array());

foreach($resultsBdd as $line){

  // si la catégorie n'est pas encore enregistrée
  if(!in_array($line['categ_id'],$resultsPhp['categ'])){
    $resultsPhp['categ'][]=$line['categ_id'];
  }

  // on récupère l'indice du tableau des catégories
  $cat_key = array_search($line['categ_id'],$resultsPhp['categ']);
  
  // si l'atelier n'est pas encore enregistré
  if(!in_array($line['id_atelier'],$resultsPhp['atelier'][$cat_key])){
    $resultsPhp['atelier'][$cat_key][]=$line['id_atelier'];
  }
}

var_dump($resultsBdd,$resultsPhp);
;)
Par contre j'aimerais que tu me dises si tu ne comprends pas, que ça ne soit pas (trop) du tout cuit!
je me retrouve avec ca moi :|

Code : Tout sélectionner

Warning: in_array() expects parameter 2 to be array, null given in D:\www\test\index.php on line 24 Notice: Undefined offset: 1 in D:\www\test\index.php on line 24 Warning: in_array() expects parameter 2 to be array, null given in D:\www\test\index.php on line 24 Notice: Undefined offset: 2 in D:\www\test\index.php on line 24 Warning: in_array() expects parameter 2 to be array, null given in D:\www\test\index.php on line 24

Re: Alimenter un array via array_push

par jojolapine » 06 juil. 2010, 12:23

Et hop!
$resultsBdd = array(
  array('id_atelier'=>1, 'categ_id'=>1),
  array('id_atelier'=>2, 'categ_id'=>4),
  array('id_atelier'=>3, 'categ_id'=>2),
  array('id_atelier'=>4, 'categ_id'=>1),
  array('id_atelier'=>5, 'categ_id'=>4)
);

$resultsPhp = array('categ'=>array(),'atelier'=>array());

foreach($resultsBdd as $line){

  // si la catégorie n'est pas encore enregistrée
  if(!in_array($line['categ_id'],$resultsPhp['categ'])){
    $resultsPhp['categ'][]=$line['categ_id'];
  }

  // on récupère l'indice du tableau des catégories
  $cat_key = array_search($line['categ_id'],$resultsPhp['categ']);
  
  // si l'atelier n'est pas encore enregistré
  if(!in_array($line['id_atelier'],$resultsPhp['atelier'][$cat_key])){
    $resultsPhp['atelier'][$cat_key][]=$line['id_atelier'];
  }
}

var_dump($resultsBdd,$resultsPhp);
;)
Par contre j'aimerais que tu me dises si tu ne comprends pas, que ça ne soit pas (trop) du tout cuit!

Alimenter un array via array_push

par dread » 05 juil. 2010, 10:22

Bonjour!

Je rencontre des difficultés à obtenir le résultat souhaité dans l'alimentation d'un array

Pour la présentation du contexte :
J'ai deux informations principales issues d'une BDD, une ou plusieurs catégories d'atelier et un ou plusieurs ateliers par catégorie

A l'heure actuelle, j'ai les deux informations dans une table atelier par l'intermediaire des champs id_atelier et categ_id (ici en clé étrangère)

Imaginons les entrées de cette table comme suit:

id_atelier categ_id
1 1
2 4
3 2
4 1
5 4

Le resultat que j'essaie d'obtenir est le suivant :
[categ] [0] => 1, [1] => 4, [2] => 2 ; [atelier] [0] => 1, 4, [1] => 2, 5, [2] => 3
J'avais pensé à quelque chose comme ça :
if($array=='' || ($array!='' && !in_array($row_atelier_termine['categ_id'],$array['categ']))){
    array_push($array['categ'], $row_atelier_termine['categ_id']);
    array_push($array['atelier'], $row_atelier_termine['atelier_id']);
}
elseif($array!='' && in_array($row_atelier_termine['categ_id'], $array['categ'])){
	$cle=array_keys($array, $row_atelier_termine['categ_id']);			
	$cle=$cle[0];
	$array['atelier'][$cle]=array();
	array_push($array['atelier'][$cle],$row_atelier_termine['atelier_id']);
}
Le souci, c'est que cela ne rajoute pas les entrées mais les écrase.

Merci pour toute aide apportée.