组2D数组数据通过一列数据,并在每个组中创建关联元素

问题描述 投票:0回答:3

我从最近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
语法中逆转了键和价值。当您使用
php arrays multidimensional-array grouping associative-array
3个回答
0
投票
时,密钥变量是在其之前出现的,之后的值变量。无论如何,您都不需要钥匙。

第二,通过将一个密钥/值对(数组)分配给您的结果结构,您永远无法获得任何分配的键。相反,您应该分配给嵌套密钥:

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);

0
投票

问题很简单:前缀和清晰的分组元素仅生活翻译。 Algorithm很简单:

对于每个元素,将其前缀放入
$output
如果还不存在。

0
投票
$output[prefix]

键 - 如果不添加已知值

添加了已知值的翻译为

mainlang
  1. that是IT.
    在这里您有工作解决方案以示例使用:
  2. $output[prefix][lang]
        
    
    
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.