在多维数组中组合内部数组 - PHP

时间:2014-11-17 12:04:19

标签: php arrays

我有一个二维数组:

array(
   array( 
    'Friend',
    'Amigo',
    '',
    ''
   ),

   array( 
    'Friend',
    '',
    'Fraund',
    ''
   ),

   array(
    'Thanks',
    'Gracias',
    '',
    ''
   ),

   array(
    'Thanks',
    '',
    'Danke',
    ''
   )
);

基本上,我需要在内部数组按相应顺序具有相同值时组合它们。例如,朋友'并且'感谢'在当前的例子中。输出应该是:

array(
   array( 
    'Friend',
    'Amigo',
    'Fraund',
    ''
   ),

   array(
    'Thanks',
    'Gracias',
    'Danke',
    ''
   )
);

因此,空元素需要被具有某些值的相应元素覆盖。无法弄清楚如何使用array_merge

4 个答案:

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

实时工作示例: http://codepad.viper-7.com/EoRhh2

答案 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)

在php中你可以使用

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

这是您想要的输出。