我有一个二维数组:
array(
array(
'Friend',
'Amigo',
'',
''
),
array(
'Friend',
'',
'Fraund',
''
),
array(
'Thanks',
'Gracias',
'',
''
),
array(
'Thanks',
'',
'Danke',
''
)
);
基本上,我需要在内部数组按相应顺序具有相同值时组合它们。例如,朋友'并且'感谢'在当前的例子中。输出应该是:
array(
array(
'Friend',
'Amigo',
'Fraund',
''
),
array(
'Thanks',
'Gracias',
'Danke',
''
)
);
因此,空元素需要被具有某些值的相应元素覆盖。无法弄清楚如何使用array_merge
。
答案 0 :(得分:1)
好吧,我会这样做
$final_array = array();
$original_array = array(
array(
'Friend',
'Amigo',
'',
''
),
array(
'Friend',
'',
'Fraund',
''
),
array(
'Thanks',
'Gracias',
'',
''
),
array(
'Thanks',
'',
'Danke',
''
)
);
$friends_array = array();
foreach($original_array[0] as $row) {
if($row != "") {
array_push($friends_array, $row);
}
}
foreach($original_array[1] as $row) {
if($row != "" && !in_array($row, $friends_array)) {
array_push($friends_array, $row);
}
}
$thanks_array = array();
foreach($original_array[2] as $row) {
if($row != "") {
array_push($thanks_array, $row);
}
}
foreach($original_array[3] as $row) {
if($row != "" && !in_array($row, $thanks_array)) {
array_push($thanks_array, $row);
}
}
array_push($final_array, $friends_array, $thanks_array);
您确实有非常具体的要求。相当奇怪tbh。
答案 1 :(得分:1)
迭代数组,将值添加到新数组(由内部数组中的第1个元素索引),然后使用array_values
获取所需的输出(或将其保持索引,这可能是有益的进一步的数据访问):
$out = [];
foreach ($input as $val) {
$key = $val[0];
foreach ($val as $item) {
if(!empty($item) && $item !=$key){
$out[$key][]=$item;
}
}
if(!in_array($key, $out[$key])) $out[$key][]=$key;
}
$out = array_values($out);
var_dump($out);
答案 2 :(得分:1)
您可以像这样使用array_reduce()
:
$result = array_values(array_reduce($a, function(array &$final, $current) {
$key = $current[0];
if (isset($final[$key])) {
// replace items that are not an empty string
$final[$key] = array_replace($final[$key], array_filter($current, 'strlen'));
} else {
$final[$key] = $current;
}
return $final;
}, []));
reduce操作创建一个数组,每个数组的第一个字用作键;如果字符串不为空,array_replace()
会使用新值更新现有值。
然后通过array_values()
拉出最终结果以删除在reduce操作期间使用的临时键。
答案 3 :(得分:0)
array_unique($arr1,$arr2);
or
array_merge($arr1,$arr2);
但是在你的情况下,你有一个阵列,你必须分成不同的阵列
$mainArary = array(
array(
'Friend',
'Amigo',
'',
''
),
array(
'Friend',
'',
'Fraund',
''
),
array(
'Thanks',
'Gracias',
'',
''
),
array(
'Thanks',
'',
'Danke',
''
)
);
$first_array = null;
$second_array = null;
$i = 0;
foreach($mainArray[0] as $arr){
if($i < 2){
if($prev_array == null){
$prev_array = $arr;
} else {
$prev_array = array_merge($prev_array,$arr);
} } else {
if($second_array == null){
$second_array = $arr;
} else {
$second_array = array_merge($second_array ,$arr);
}
}
}
print_r($prev_array);
print_r($second_array);
这是您想要的输出。