我构建一个使用填充了翻译键的数组构建的翻译表单,但是密钥通常是重复的。当表单在组中构建时,我想将重复项移动到$translatables['global']
请注意,您在下图中看到的内容已经放在$translatables['modules']['Module_{{ModuleName}}']
如下图所示,某些字段是重复的。那些需要被移动。重复项可以跨多个元素放置。
我编辑了重复的消息:它是一个问题,移动这些值而不是过滤它们(并保留1个),它们需要放在全局部分下。
答案 0 :(得分:0)
我自己解决了
class Tools_Array
{
public static function find_duplicates_recursive(&$array, $remove = false)
{
$duplicates = array();
$valueCounts = array_count_values(self::array_values_recursive($array));
foreach ($valueCounts as $key => $value) {
if ($value > 1)
{
$duplicates[] = $key;
}
}
if ($remove) {
foreach ($duplicates as $duplicate)
{
$array = self::remove_values_recursive($array, $duplicate);
}
}
return $duplicates;
}
public static function array_values_recursive($array)
{
$arr2 = array();
foreach ($array as $key => $value)
{
if(is_array($value))
{
$arr2 = array_merge(array_values_recursive($value), $arr2);
}else{
$arr2[] = $value;
}
}
return $arr2;
}
public static function remove_values_recursive($array, $needle)
{
foreach ($array as $key => $value)
{
if(is_array($value))
{
$array[$key] = self::remove_values_recursive($value, $needle);
}else{
if ($value == $needle)
{
unset($array[$key]);
}
}
}
return $array;
}
}
然后我可以用:
过滤它$duplicates = Tools_Array::find_duplicates_recursive($translatables, true);
$translatables['globaal'] = array_merge($translatables['globaal'], $duplicates);