web-dev-qa-db-fra.com

Comment puis-je ajouter une condition dans un tableau php?

Voici le tableau

$anArray = array(
   "theFirstItem" => "a first item",
   if(True){
     "conditionalItem" => "it may appear base on the condition",
   }
   "theLastItem"  => "the last item"

);

Mais j'obtiens l'erreur PHP Parse, pourquoi je peux ajouter une condition dans le tableau, que se passe-t-il ??

PHP Parse error:  syntax error, unexpected T_IF, expecting ')'
24
Tattat

Malheureusement, ce n'est pas possible du tout.

Si avoir l'élément avec la valeur NULL est correct, utilisez ceci:

$anArray = array(
   "theFirstItem" => "a first item",
   "conditionalItem" => $condition ? "it may appear base on the condition" : NULL,
   "theLastItem"  => "the last item"
);

Sinon, vous devez le faire comme ça:

$anArray = array(
   "theFirstItem" => "a first item",
   "theLastItem"  => "the last item"
);

if($condition) {
   $anArray['conditionalItem'] = "it may appear base on the condition";
}

Si l'ordre compte, ce sera encore plus laid:

$anArray = array("theFirstItem" => "a first item");
if($condition) {
   $anArray['conditionalItem'] = "it may appear base on the condition";
}
$anArray['theLastItem'] = "the last item";

Cependant, vous pouvez rendre ceci un peu plus lisible:

$anArray = array();
$anArray['theFirstItem'] = "a first item";
if($condition) {
   $anArray['conditionalItem'] = "it may appear base on the condition";
}
$anArray['theLastItem'] = "the last item";
37
ThiefMaster

Vous pouvez le faire comme ça:

$anArray = array(1 => 'first');
if (true) $anArray['cond'] = 'true';
$anArray['last'] = 'last';

Cependant, ce que vous voulez n'est pas possible.

4
azat

Si vous créez un tableau purement associatif et que l'ordre des clés n'a pas d'importance, vous pouvez toujours nommer la clé de manière conditionnelle à l'aide de la syntaxe d'opérateur ternaire.

$anArray = array(
    "theFirstItem" => "a first item",
    (true ? "conditionalItem" : "") => (true ? "it may appear base on the condition" : ""),
    "theLastItem" => "the last item"
);

De cette manière, si la condition est remplie, la clé existe avec les données. Si ce n'est pas le cas, il s'agit simplement d'une clé vide avec une valeur de chaîne vide. Cependant, compte tenu de l'excellente liste de réponses déjà fournies, il pourrait exister une meilleure option pour répondre à vos besoins. Ce n'est pas tout à fait propre, mais si vous travaillez sur un projet comportant de grands tableaux, il peut s'avérer plus simple de sortir du tableau et de l'ajouter par la suite. surtout si le tableau est multidimensionnel.

4
Adam Kelso

Il n'y a pas de magie pour aider ici. Le mieux que vous puissiez faire est la suivante:

$anArray = array("theFirstItem" => "a first item");
if (true) {
    $anArray["conditionalItem"] = "it may appear base on the condition";
}
$anArray["theLastItem"]  = "the last item";

Si vous ne vous souciez pas spécifiquement de l'ordre des articles, cela devient un peu plus supportable:

$anArray = array(
    "theFirstItem" => "a first item",
    "theLastItem"  => "the last item"
);
if (true) {
    $anArray["conditionalItem"] = "it may appear base on the condition";
}

Ou bien, si l'ordre est vrai est important et que les éléments conditionnels sont plus qu'un couple, vous pouvez le faire, ce qui pourrait être considéré comme plus lisible:

$anArray = array(
    "theFirstItem" => "a first item",
    "conditionalItem" => "it may appear base on the condition",
    "theLastItem"  => "the last item",
);

if (!true) {
    unset($anArray["conditionalItem"]);
}

// Unset any other conditional items here
1
Jon

Essayez ceci si vous avez un tableau associatif avec différentes clés:

$someArray = [
    "theFirstItem" => "a first item",
] + 
$condition 
    ? [
        "conditionalItem" => "it may appear base on the condition"
      ] 
    : [ /* empty array if false */
] + 
[
    "theLastItem" => "the last item",
];

ou ceci si le tableau n'est pas associatif

$someArray = array_merge(
    [
        "a first item",
    ],
    $condition 
        ? [
            "it may appear base on the condition"
          ] 
        : [ /* empty array if false */
    ], 
    [
        "the last item",
    ]
);
1
Tony Axo

Vous pouvez affecter toutes les valeurs et filtrer les clés vides du tableau en une fois, comme ceci:

$anArray = array_filter([
   "theFirstItem" => "a first item",
   "conditionalItem" => $condition ? "it may appear base on the condition" : NULL,
   "theLastItem"  => "the last item"
]);

Cela vous permet d’éviter les conditions supplémentaires après coup, de maintenir l’ordre des clés et de le rendre assez lisible. La seule mise en garde ici est que si vous avez d'autres valeurs de fausseté (0, false, "", array()), elles seront également supprimées. Dans ce cas, vous pouvez souhaiter ajouter un rappel pour vérifier explicitement NULL. Dans le cas suivant, theLastItem ne sera pas filtré par inadvertance:

$anArray = array_filter([
    "theFirstItem" => "a first item",
    "conditionalItem" => $condition ? "it may appear base on the condition" : NULL,
    "theLastItem"  => false,
], function($v) { return $v !== NULL; });
0
billynoah

Vous pouvez le faire comme ça:

$anArray = array(
    "theFirstItem" => "a first item",
    (true ? "conditionalItem" : "EMPTY") => (true ? "it may appear base on the condition" : "EMPTY"),
    "theLastItem" => "the last item"
);

désélectionne l'élément de tableau EMPTY si la condition est fausse

unset($anArray['EMPTY']);
0
Asim Ansari