Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > соединение многомерных массивов


Автор: spx 12.3.2006, 12:32
всем привет!
никак не могу справитья со следующей задачей:
есть несколько массивов (может быть 2, 3 или 4).
например:
Код

$array1 = array('first'=>1, 'second'=>2, 'third'=3);
$array2 = array('first'=>1, 'second'=>2, 'third'=4);
$array3 = array('first'=>1, 'second'=>2, 'third'=5);


нужно получить массив
Код


$array4 = array('first'=>1, 'second'=2, 'third'=>array('1'=>3, '2'=>4, '3'=>5));


я накатал решение для определенного числа массивов и равного числа значений в них:
Код

<?php
$c = array();
$array1 = array('f'=>3, 's'=>4, 't'=>'222');
$array2 = array('f'=>3, 's'=>4, 't'=>'333');
foreach ($array1 as $arra1 => $value1) {
        if ($array1[$arra1] == $array2[$arra1]) {
           $c[$arra1] = $array1[$arra1];
        }
        else $c[$arra1] = array('1'=>$array1[$arra1], '2'=>$array2[$arra1]);
}
?>

но не знаю как реализовать решение для неограниченного числа массивов и различного числа значений в них... т.е. например, если в один из массивов добавится значение 'third'=>444, а в других его не будет, то оно должно быть и в результирующем массиве.

Автор: ZlojEzh 12.3.2006, 13:41
Код

  $arrays = array();

  $arrays[] = array('first'=>2, 'second'=>2);
  $arrays[] = array('first'=>1, 'second'=>6);
  $arrays[] = array('first'=>1, 'second'=>2, 'third'=>5);
  $arrays[] = array('third'=>7);

  print_r($arrays);
  print_r(my_merge($arrays));


  function my_merge($arrays) {
    $result = array();
    foreach ($arrays as $arr) {
      foreach ($arr as $field => $value) {
        if (isset($result[$field])) {
          if (is_array($result[$field])) {
            if (!in_array($value,$result[$field])) {
              $result[$field][] = $value;
            }
          } else {
            if ($result[$field]!=$value) {
              $result[$field] = array($result[$field],$value);
            }
          }
        } else {
          $result[$field] = $value;
        }
      }
    }
    return $result;
  }


Вывод:

Код

Array
(
    [0] => Array
        (
            [first] => 2
            [second] => 2
        )

    [1] => Array
        (
            [first] => 1
            [second] => 6
        )

    [2] => Array
        (
            [first] => 1
            [second] => 2
            [third] => 5
        )

    [3] => Array
        (
            [third] => 7
        )

)
Array
(
    [first] => Array
        (
            [0] => 2
            [1] => 1
        )

    [second] => Array
        (
            [0] => 2
            [1] => 6
        )

    [third] => Array
        (
            [0] => 5
            [1] => 7
        )

)

Автор: spx 12.3.2006, 16:20
спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)