0 votes

tableau php bizarre

Mon tableau php ressemble à ceci :

Array ( 
[0] => dummy 
[1] => stdClass Object ( 
    [aid] => 1 
    [atitle] => Ameya R. Kadam ) 
[2] => stdClass Object ( 
    [aid] => 2 
    [atitle] => Amritpal Singh ) 
[3] => stdClass Object ( 
    [aid] => 3 
    [atitle] => Anwar Syed ) 
[4] => stdClass Object ( 
    [aid] => 4 
    [atitle] => Aratrika )  
) )

Je veux maintenant faire écho aux valeurs contenues dans [atitle]. Pour être plus précis, je veux imploser les valeurs de atitle dans une autre variable. Comment puis-je le faire ?

4voto

johannes Points 8057

Avec PHP 5.3 :

$result = array_map(function($element) { return $element->atitle; }, $array);

si vous n'avez pas la version 5.3, vous devez faire de la fonction anonyme une fonction régulière et fournir le nom sous forme de chaîne.


Plus haut, j'ai manqué la partie concernant l'élément vide, en utilisant cette approche, cela pourrait être résolu en utilisant array_filter :

$array = array_filter($array, function($element) { return is_object($element); });
$result = array_map(function($element) { return $element->atitle; }, $array);

Si vous êtes fou, vous pouvez écrire cela en une ligne...

3voto

Pascal MARTIN Points 195780

Votre tableau est déclaré un peu comme ceci :
(Dans votre cas réel, vous récupérez probablement vos données à partir d'une base de données ou quelque chose comme ça - mais cela devrait être correct, ici, pour tester).

$arr = array(
    'dummy',
    (object)array('aid' => 1, 'atitle' => 'Ameya R. Kadam'), 
    (object)array('aid' => 2, 'atitle' => 'Amritpal Singh'), 
    (object)array('aid' => 3, 'atitle' => 'Anwar Syed'), 
    (object)array('aid' => 4, 'atitle' => 'Aratrika'), 
);

Ce qui signifie que vous pouvez extraire tous les titres dans un tableau, en bouclant sur votre tableau initial. (en excluant le premier élément, et en utilisant le atitle de chaque objet) :

$titles = array();
$num = count($arr);
for ($i=1 ; $i<$num ; $i++) {
    $titles[] = $arr[$i]->atitle;
}
var_dump($titles);

Vous obtiendrez un tableau comme celui-ci :

array
  0 => string 'Ameya R. Kadam' (length=14)
  1 => string 'Amritpal Singh' (length=14)
  2 => string 'Anwar Syed' (length=10)
  3 => string 'Aratrika' (length=8)

Et vous pouvez maintenant implode tout cela à une chaîne :

echo implode(', ', $titles);

Et vous obtiendrez :

Ameya R. Kadam, Amritpal Singh, Anwar Syed, Aratrika

1voto

Simon Points 22764
foreach($array as $item){
    if(is_object($item) && isset($item->atitle)){
         echo $item->atitle;
    }
}

pour les mettre dans un Array, il suffit de le faire :

$resultArray = array();
foreach($array as $item){
    if(is_object($item) && isset($item->atitle)){
          $resultArray[] = $item->atitle;
    }
}

Ensuite, resultArray est un tableau de tous les titres.

Ensuite, vous pouvez produire comme vous le souhaitez

$output = implode(', ', $resultArray);

0voto

metrobalderas Points 2565

Ce que vous avez là est un objet.

Vous pouvez accéder à [atitle] via

$array[1]->atitle;

0voto

cballou Points 13804

Si vous voulez vérifier l'existence du titre avant la sortie, vous pouvez utiliser :

// generates the title string from all found titles
$str = '';
foreach ($array AS $k => $v) {
    if (isset($v->title)) {
        $str .= $v->title;
    }
}
echo $str;

Si vous vouliez les placer dans un tableau, il suffirait de changer rapidement de méthode de stockage :

// generates the title string from all found titles
$arr = array();
foreach ($array AS $k => $v) {
    if (isset($v->title)) {
        $arr[] = $v->title;
    }
}
echo implode(', ', $arr);

stdClass vous oblige à utiliser la notation par pointeur -> pour la référence, alors que les tableaux nécessitent d'être référencés par indice, c'est-à-dire [4] . Vous pouvez les référencer comme :

$array[0]
$array[1]->aid
$array[1]->atitle
$array[2]->aid
$array[2]->atitle
// etc, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X