Smarty doesn't display multidimensional arrays [duplicate] - php

This question already has answers here:
Smarty: How to reference to the associative array index
(4 answers)
Closed 8 years ago.
I have problem with displaying my array in smarty. It looks like this. Declaration of array:
index.php:
$rewrites = array(
'en' => array(
'homepage' => 'homepage'
),
'de' => array(
'homepage' => 'zuhause'
),
);
$smarty->assign('rewrites', $rewrites);
And in template file:
{$rewrites|#print_r}
{$rewrites[de][homepage]}
First line prints whole array like it is, so array is assigned. But second line shows nothing, why? How to do it properly? If I do it like this {$rewrites.de.homepage} it works but I really need to declare my array value like this {$rewrites[de][homepage]} because 'de' comes from other variable, that define current language. My target is {$rewrites[$lang][homepage]} for example.

Use:
{$rewrites[$lang]['homepage']}
You can use also:
{$rewrites.{$lang}.homepage}

Simply try this:
{$rewrites.de.homepage}

you can do is as follows {$rewrites[$lang].homepage}

Related

PHP search an array value inside an array in one line [duplicate]

This question already has an answer here:
Get key from first array on Search Array in Array PHP
(1 answer)
Closed 3 months ago.
I'm using PHP 7.4. I have this array :
$sections = [
'sectionOne' => [
'foo',
'bar',
'hello',
],
'sectionTwo' => [
'yo',
'heya',
],
];
I'd like to build a function to return the section of the received array value
public function getSectionByValue($value) {
return ...
}
If the value is bar then I'll get sectionOne. If the value is yo then I'll get sectionTwo etc...
How can I do to search an array value inside an array ? It is possible to do this in one line ?
You can do something like this inside getSectionByValue function if you really want an one liner.
return key(array_filter($sections, fn($section) => in_array($value, $section)));
If the provided value exists in multiple sections, it will just return the first one.

PHP Accessing array values using Object Operator with key [duplicate]

This question already has answers here:
How to convert an array to object in PHP?
(35 answers)
Closed 2 years ago.
Say I have an array like the following:
$arr = array(
'id' => 123,
'title' => 'Example Title',
);
How come I cannot access the values using PHP's object operator (->)? In theory, I should be able to do $arr->title but that doesn't work and I have to access it as $arr['title'] instead.
I've been reading plenty of examples of people using the object operator however it's not returning anything but a null value.
Has something changed in recent versions of PHP or am I misunderstanding the examples given?
this code work 100% fine
$arr = (object) array(
'id' => 123,
'title' => 'Example Title',
);
echo $arr->title;

how to use array_push() [duplicate]

This question already has answers here:
Add values to an associative array in PHP
(2 answers)
Closed 7 years ago.
I want to push new data in array which each value of them.
$array = array("menu1" => "101", "menu2" => "201");
array_push($array, "menu3" => "301");
But I got an error syntax.
And if I use like this :
$array = array("menu1" => "101", "menu2" => "201");
array_push($array, "menu3", "301");
result is : Array ( [menu1]=>101 [menu2]=>201 [0]=>menu3 [1]=>301 )
My hope the result is : Array ( [menu1]=>101 [menu2]=>201 [menu3]=>301 )
I want push new [menu3]=>'301' but I dont know how. Please help me, the answer will be appreciate
You can use
$array["menu3"] = "301"
as for array_push
array_push() treats array as a stack, and pushes the passed variables onto the end of array
so for associative arrays is a no match
another suitable function for what you want but it requires an array argument is array_merge
$result = array_merge(array("one" => "1"), array("two" => "2"));

Why is this PHP array not the same? [duplicate]

This question already has answers here:
How can I access an array/object?
(6 answers)
Closed 4 months ago.
I'm not understanding why the array:
<? $data = array( 'items[0][type]' => 'screenprint'); ?>
Is not the same as
<? echo $data['items'][0]['type']; ?>
I'm trying to add to the array but can't seem to figure out how?
array( 'items[0][type]' => 'screenprint')
This is an array which has one key which is named "items[0][type]" which has one value. That's not the same as an array which has a key items which has a key 0 which has a key type. PHP doesn't care that the key kinda looks like PHP syntax, it's just one string. What you want is:
$data = array('items' => array(0 => array('type' => 'screenprint')));
I hope it's obvious that that's a very different data structure.
It should be:
$data = [
'items' => [['type' => 'screenprint']]
];
echo $data['items'][0]['type'];

How to get key value of array? [duplicate]

This question already has answers here:
Getting the key of the only element in a PHP array
(6 answers)
Closed 8 years ago.
How do I get the value of a key of any array item? Like how a foreach loop turns it into $k => $v...except I only want to do that once, so no need for a loop. Do I really need to make a new array that it flips to?
Take this for example.
1 => array(
'street' => 'Street Address ',
'town' => 'Town/City '
),
2 => array(
'state' => 'State '
),
Those are arrays inside a bigger array. And now I tried to do this
array_flip($thatarrayupthere[2]['state'])
What I want to receive from that is "state" because that is the key name. But I'm getting errors.
I'm not exactly sure what you wan't, but if you just want to get the key of the second array in any given array this might help.
$key = key($array[2]);
In your example above you will get "state" in your $key variable.
$key = array_keys($array[2]);
print_r($key);
ref: http://php.net/manual/en/function.array-keys.php

Categories