我的文本不确定,需要翻译成不同的语言,
例如$ text1需要翻译成法语和匈牙利语。
$text1 = array ('fr', 'hr');
$text2 = array ('bg', 'el', 'hr');
$text3 = array ('bg', 'el', 'en', 'es');
$text4 = array ('bg', 'el', 'en', 'es');
$text5 = array ('bg', 'el', 'en', 'es', 'fr', 'hr');
现在,我正在寻找一种将文本和语言组合在一起的方法,以便获得最少的语言组合,以获得如下所示的内容:
$order1 = array('languages' => array('bg', 'el'), 'texts' => array ('text2', 'text3', 'text4', 'text5'));
$order2 = array('languages' => array('en', 'es'), 'texts' => array ('text3', 'text4', 'text5'));
$order3 = array('languages' => array('hr'), 'texts' => array ('text1', 'text2', 'text5'));
$order4 = array('languages' => array('fr'), 'texts' => array ('text1', 'text5'));
我绝对不知道如何开始。有人可以给我一个提示吗? 非常感谢。
答案 0 :(得分:2)
这确实是一个非常棘手的问题。
这是我的解决方法:
// first collect all texts per individual language
for( $i = 1, $data = []; ( $key = 'text' . $i++ ) && isset( ${$key} ); ) {
$data = array_merge_recursive( $data, array_fill_keys( ${$key}, $key ) );
}
// then walk through them and find other languages that match the same texts
for( $i = 1, $orders = []; count( $data ) > 0; $i++ ) {
$texts = reset( $data );
$order = [ 'languages' => [], 'texts' => $texts ];
while( false !== ( $lang = array_search( $texts, $data, true ) ) ) {
$order[ 'languages' ][] = $lang;
unset( $data[ $lang ] );
}
$orders[ 'order' . $i ] = $order;
}
注释
$order1
,$order2
等),而不是orders数组,可以执行extract( $orders );
将其提取到当前范围中,但我建议不要这样做,因为如果您不小心的话,可能会意外覆盖先前存在的变量。答案 1 :(得分:1)
-->Link for 3v4l.org full code<--
您必须花一点时间检查所有阵列位置
while($aux< count($order1)
您还需要一个$ containPrev1,如果$ text的$ order1中没有所有的“语言”,它将变为false。
使用函数“ in_array”检查数组元素是否在$ text中。您将检查所有可能导致出现提示的元素。
in_array($order1[$aux], $text1)
如果它不在数组中,则将$ containPrev1设置为false,以指出$ order1的至少一个元素不在$ text1中,因此您会在其余时间内忽略$ text1。
我将元素添加到字符串中,然后将字符串explode()创建一个数组,您可以直接创建一个数组,因此您应该检查它并对其进行修改(我假设您在最后添加了'text1')数组的元素)。
$finalstr = $finalstr . $text1[$lastpos].' ';
$arrayfinal = explode(" ", $finalstr);
代码过于复杂,您可以使用函数简化代码重复,将其用作基础并加以改进。
对不起,英语不好,而且缺少正确的文本格式,我仍然对stackoverflow还是陌生的