Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

A conditional element inside an array(...) construct

Tags:

My system sends a configuration array to a function like this:

callThatFunction( array(k1 => v1,  k2 => v2, ... kn=vn));

I want to make one of the key value pairs, conditional upon some circumstances.

Can I do this without creating a variable for the array (and this breaking the clean config syntax that someone else had created)?

Like this

callThatFunction ( array(
k1 => v1, 
if($cond( {k2 => v2,} 
... 
kn=vn));

The above is obviously wrong syntactically, but should express my idea.

Thank you

like image 341
shealtiel Avatar asked Nov 07 '10 17:11

shealtiel


People also ask

How do you define an array with conditional elements?

Call Array. Another way to conditionally add items conditionally to a JavaScript array is to use the push method. Then 'bar' is appended to items but 'false' isn't . This is because the first conditionally has true as the conditional and the 2nd one has false as the condition. Therefore items is [“foo”, “bar”] again.

How to add condition in array?

Create array with essential elements. Then add conditional elements to the array. Now add other elements if required.

Can you put an if statement inside an array?

you cannot put an if inside an array like that.

How do you check if an element exists in an array JavaScript?

You can use the includes() method in JavaScript to check if an item exists in an array. You can also use it to check if a substring exists within a string. It returns true if the item is found in the array/string and false if the item doesn't exist.


2 Answers

You can use the conditional operator cond ? true-expr : false-expr:

$someConfig = array(
    'k1' => 'v1',
    'k2' => $cond ? 'v2a' : 'v2b'
);

The conditional expression $cond ? 'v2a' : 'v2b' will yield 'v2a' if $cond evaluates to true and 'v2b' otherwise. But this works only with the value of a key.

If you only want to add a key based on a condition, you need to use a separate if:

$someConfig = array('k1' => 'v1');
if ($cond) {
    $someConfig['k2'] = 'v2';
}

Edit    You can add keys conditionally without a variable using the array union operator or array_merge:

array('k1' => 'v1') + ($cond ? array('k2' => 'v2') : array())
array_merge(array('k1' => 'v1'), $cond ? array('k2' => 'v2') : array())

Now you need to decide what’s more readable or better to maintain.

like image 113
Gumbo Avatar answered Sep 17 '22 06:09

Gumbo


Eventually I came up with the following:

callThatFunction( array(k1 => v1, k2 => v2, ... kn=vn) + ($cond ? array(key=>value) : array()) )

Will still appreciate a suggestion for somethings that will express the intention more directly

like image 40
shealtiel Avatar answered Sep 20 '22 06:09

shealtiel