I banging my head from last 3 hours to rearrange a array, so far no luck.
I need this array to be rearrange like this: Array (A)
Array
(
[0] => Array
(
[langtext] => hello world
[mainlang] => hello world
[lang] => en
[prefix] => 1
)
[1] => Array
(
[langtext] => Bonjour le monde
[mainlang] => hello world
[lang] => fr
[prefix] => 1
)
[2] => Array
(
[langtext] => Привет мир
[mainlang] => hello world
[lang] => ru
[prefix] => 1
)
[3] => Array
(
[langtext] => provide
[mainlang] => provide
[lang] => en
[prefix] => 7
)
[4] => Array
(
[langtext] => обеспечить
[mainlang] => provide
[lang] => ru
[prefix] => 7
)
[5] => Array
(
[langtext] => fournir
[mainlang] => provide
[lang] => fr
[prefix] => 7
)
)
Rearrange as: Array (B)
Array (
[prefix] => Array
(
[1] => Array
(
[en] => hello world
[mainlang] => hello world
[fr] => Bonjour le monde
[ru] => Привет мир
)
[7] => Array
(
[en] => provide
[mainlang] => provide
[fr] => fournir
[ru] => обеспечить
)
}
Detail: I need to rearrange array from (A) to (B), "lang" key value are different in all array where "prefix" are same.
I tried foreach (but only able to return prefix as key and any "lang" value.
foreach (_allLangText() as $lang_array=>$key){
$lang_array_return['prefix']
[$lang_array['prefix']]=array($lang_array['lang']=>$lang_array['langtext']);
}
And i get output like this, which is incorrect:
Array
(
[prefix] => Array
(
[1] => Array
(
[ru] => Привет мир
)
[7] => Array
(
[fr] => fournir
)
)
Finally, there is possibility that there is more "lang" value in array, I mean "en","ru","fr" or "de" etc. and if there is 4 different value in lang then same "prefix" will repeat in 4 arrays.
VAR_Export:
array (
0 =>
array (
'langtext' => 'hello world',
'mainlang' => 'hello world',
'lang' => 'en',
'prefix' => '1',
),
1 =>
array (
'langtext' => 'Bonjour le monde',
'mainlang' => 'hello world',
'lang' => 'fr',
'prefix' => '1',
),
2 =>
array (
'langtext' => 'Привет мир',
'mainlang' => 'hello world',
'lang' => 'ru',
'prefix' => '1',
),
3 =>
array (
'langtext' => 'provide',
'mainlang' => 'provide',
'lang' => 'en',
'prefix' => '7',
),
4 =>
array (
'langtext' => 'обеспечить',
'mainlang' => 'provide',
'lang' => 'ru',
'prefix' => '7',
),
5 =>
array (
'langtext' => 'fournir',
'mainlang' => 'provide',
'lang' => 'fr',
'prefix' => '7',
),
)
One issue is that you reversed key and value in the foreach
syntax. When you use =>
, the key variable comes before it, and the value variable after. Any way, you don't need the key.
Secondly, by assigning one key/value pair (array) to your result structure, you can never get anything more than one key assigned in the end. Instead, you should assign to the nested key:
foreach (_allLangText() as $lang_array) {
$lang_array_return["prefix"][$lang_array["prefix"]][$lang_array["lang"]]
= $lang_array["langtext"];
$lang_array_return["prefix"][$lang_array["prefix"]]["mainlang"]
= $lang_array["mainlang"];
}