J'utilise PHP. J'ai un tableau d'objets et j'aimerais ajouter un objet à la fin de celui-ci.
$myArray[] = null; //adds an element
$myArray[count($myArray) - 1]->name = "my name"; //modifies the element I just added
Ce qui précède est fonctionnel, mais existe-t-il un moyen plus propre et plus lisible de l'écrire? Peut-être une ligne?
Il suffit de faire:
$object = new stdClass();
$object->name = "My name";
$myArray[] = $object;
Vous devez d'abord créer l'objet (la ligne new
), puis le placer à la fin du tableau (la ligne []
).
Vous pouvez aussi faire ceci:
$myArray[] = (object) array('name' => 'My name');
Cependant, je dirais que ce n'est pas aussi lisible, même si c'est plus succinct.
Avez-vous vraiment besoin d'un objet? Qu'en est-il de:
$myArray[] = array("name" => "my name");
Il suffit d'utiliser un tableau à deux dimensions.
Sortie (var_dump):
array(1) {
[0]=>
array(1) {
["name"]=>
string(7) "my name"
}
}
Vous pouvez accéder à votre dernière entrée comme ceci:
echo $myArray[count($myArray) - 1]["name"];
Quelque chose comme:
class TestClass {
private $var1;
private $var2;
private function TestClass($var1, $var2){
$this->var1 = $var1;
$this->var2 = $var2;
}
public static function create($var1, $var2){
if (is_numeric($var1)){
return new TestClass($var1, $var2);
}
else return NULL;
}
}
$myArray = array();
$myArray[] = TestClass::create(15, "asdf");
$myArray[] = TestClass::create(20, "asdfa");
$myArray[] = TestClass::create("a", "abcd");
print_r($myArray);
$myArray = array_filter($myArray, function($e){ return !is_null($e);});
print_r($myArray);
Je pense qu'il y a des situations où ces constructions sont préférables aux tableaux. Vous pouvez déplacer toute la logique de vérification dans la classe.
Ici, avant l'appel à array_filter $ myArray a 3 éléments. Deux objets corrects et un NULL. Après l'appel, seuls les 2 éléments corrects persistent.
Voici une autre méthode propre que j'ai découverte si vous avez plusieurs enregistrements dans une foreach
:
$foo = [];
array_Push($foo, (object)[
'key1' => 'fooValue'
'key2' => 'fooValue2'
'key3' => 'fooValue3'
]);
return $foo;