我从最近3个小时敲我的头到重新排列一个阵列,到目前为止没有运气。 我需要这样的阵列要重新排列:数组(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
)
)
REARRANGEAS: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] => обеспечить
)
}
详细信息: 我需要将数组从(a)重新排列到(b),“ lang”键值在所有数组中都不同,其中“前缀”相同。 我尝试了foreach(但只能将前缀返回为键和任何“ lang”值。
foreach (_allLangText() as $lang_array=>$key){
$lang_array_return['prefix']
[$lang_array['prefix']]=array($lang_array['lang']=>$lang_array['langtext']);
}
我得到这样的输出,这是不正确的:
Array
(
[prefix] => Array
(
[1] => Array
(
[ru] => Привет мир
)
[7] => Array
(
[fr] => fournir
)
)
最终,在数组中有更多的“ lang”值,我的意思将重复4个阵列。
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',
),
)
一个问题是,您在
foreach
语法中逆转了键和价值。当您使用第二,通过将一个密钥/值对(数组)分配给您的结果结构,您永远无法获得任何分配的键。相反,您应该分配给嵌套密钥:
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"];
}
每次遇到唯一的前缀时,建议将新的参考推入您的结果阵列。 随后遇到前缀时,将语言数据推入参考。 demo
$result = [];
foreach ($array as $row) {
extract($row);
if (!isset($ref[$prefix])) {
$ref[$prefix] = compact('mainlang');
$result[] =& $ref[$prefix];
}
$ref[$prefix][$lang] = $langtext;
}
var_export($result);
$output[prefix]
键 - 如果不添加已知值
添加了已知值的翻译为
mainlang
$output[prefix][lang]