X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Соединить массивы
alex159
alex159
Topic Starter сообщение 14.5.2014, 20:43; Ответить: alex159
Сообщение #1


Здравствуйте!
Есть два массива

Array ( [0] => 1 [1] => 1 [2] => 2 ) - тут id элемента
Array ( [0] => 4 [1] => 2 [2] => 1 ) - тут количество этих элементов

Нужно как то их соединить причем так что бы значение повторяющихся элементов суммировались.
И получилось так 
 

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

самая главная трудность в том что все элементы могут быть в разном порядке. 

Пример
 

Array ( [0] => 2 [1] => 1 [2] => 2 [3] => 1 ) - тут id элемента
Array ( [0] => 4 [1] => 2 [2] => 1 [3] => 4 ) - тут количество этих элементов

В итоге 



Array ( [5] => 2 [6] => 1 )

Каким способом можно решить эту задачу? 
Заранее спасибо 
Могу привести к такому виду 
 

Array ( [5] => 2 [3] => 1 [1] => 2 )

А теперь как суммировать ключи элементов массива  где значения одинаковые? 


Сообщение отредактировал alex159 - 14.5.2014, 20:35
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 15.5.2014, 10:24; Ответить: matroskin8
Сообщение #2


Здравствуйте.
Как-то вы сумбурно объяснили задачу:
(alex159) *
что бы значение повторяющихся элементов суммировались

(alex159) *
как суммировать ключи элементов массива где значения одинаковые?

Так что нужно суммировать: значения или ключи?
Дважды перечитал и все равно не понял, что и по какому алгоритму нужно сделать. Например, откуда в первом примере взялся в новом массиве ключ 6? Если суммировать повторяющиеся ключи или повторяющиеся значения, то все равно не получим в итоге 6... в исходных массивах по 3 элемента, а в итоговом 2... то же касается и прочих примеров.
Попробуйте сформулировать задачу более понятно, можно буквально на пальцах, например, из перевого массива берем то-то (по какой-то закономерности/условию), из второго то-то (по той же закономерности/условию) и в итоге получаем что-то в итоговом массиве.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kamchatniyoleg
kamchatniyoleg
сообщение 15.5.2014, 10:44; Ответить: kamchatniyoleg
Сообщение #3


Прочитал несколько раз - не понял до сих пор что имеете введу . Опишите подробнее и нормальным понятным языком .
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alex159
alex159
Topic Starter сообщение 15.5.2014, 12:55; Ответить: alex159
Сообщение #4


Извините, голова уже не варит.

Array ( [0] => 2 [1] => 1 [2] => 2 [3] => 1 ) - тут id элемента
Array ( [0] => 4 [1] => 2 [2] => 1 [3] => 4 ) - тут количество этих элементов 

В первом массиве значение каждого элемента это id.
Во втором, значение каждого элемента это количество записей с таким id 

Нужно сделать так что бы значение с нижнего массива перешло в ключ первого массива 
т.е так
 

Array ( [4] => 2 [2] => 1 [1] => 2 [4] => 1 )

После чего суммировать ключи элементов с одинаковым значением.

Array ( [5] => 2 [6] => 1 )

Извините если не правильно объясняю.


Задачу решил как то так

$a=array(5=>2,3=>1,1=>2);// получил такой массив через цикл foreach
 
foreach($a as $k=>$v) {$b[$v]+=$k;}
 
$a=array_flip($b); // на выходи то что хотел получить
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 15.5.2014, 13:39; Ответить: matroskin8
Сообщение #5


(alex159) *
Извините, голова уже не варит.

Array ( [0] => 2 [1] => 1 [2] => 2 [3] => 1 ) - тут id элемента
Array ( [0] => 4 [1] => 2 [2] => 1 [3] => 4 ) - тут количество этих элементов

В первом массиве значение каждого элемента это id. Во втором, значение каждого элемента это количество записей с таким id Нужно сделать так что бы значение с нижнего массива перешло в ключ первого массива т.е так

Array ( [4] => 2 [2] => 1 [1] => 2 [4] => 1 )


Плохая идея. Смотрите, а что будет, если у нас кол-во статей для ID 1 будет не 2, а 1? Т.е. вот такие 2 массива:

Array ( [0] => 2 [1] => 1 [2] => 2 ) // тут id элемента
Array ( [0] => 4 [1] => 1 [2] => 1 ) // тут количество этих элементов

Тогда, следуя алгоритму, мы должны получить такой промежуточный массив:

Array ( [4] => 2 [1] => 1 [1] => 2 )

Т.е. в промежуточном массиве мы получим два одинаковых ключа 1... в результате интерпретатор просто перезапишет предыдущий элемент массива следующим и получим неожиданный результат:

Array ( [4] => 2 [1] => 2 )

Не знаком с деталями вашей задачи, но здравый смысл подсказывает, что она должна решаться правильно составленным запросом, который выберет из БД нужные ID и кол-во записей для них.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alex159
alex159
Topic Starter сообщение 15.5.2014, 13:47; Ответить: alex159
Сообщение #6


[member=matroskin8], есть 2 таблицы(`phone`,`list`) мне нужно с них вытащить город(`town`) и создать общею статистику по этим данным.

К примеру

первая таблица выводит

Киев | Николаев | Севастополь 
  4     |      1         |   5
 
Вторая

Львов |Николаев|
|  2      |    9         |

В итоге должно получиться 
Киев | Николаев | Севастополь|Львов
  4     |      10        |   5                 |  2
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kamchatniyoleg
kamchatniyoleg
сообщение 15.5.2014, 14:15; Ответить: kamchatniyoleg
Сообщение #7


посмотрите в сторону left join , а также GROUP BY
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 15.5.2014, 16:00; Ответить: matroskin8
Сообщение #8


Без дампа сложно что-то подсказать. Приложите дамп и покажите какой-нибудь простой реальный результат, который нужно вытащить из базы... лучше результат показать в виде картинки.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alex159
alex159
Topic Starter сообщение 15.5.2014, 16:16; Ответить: alex159
Сообщение #9


Вот код которым я пытаюсь вывести 

 $query = mysql_query("
    SELECT `town`
    FROM `list`
    UNION SELECT `town`
   FROM `phone`");
 
   
      while($myrow = mysql_fetch_assoc($query)) {
        $towns[] = $myrow['town'];  //Список всех городов
        }
        echo "<pre>";
      print_r($towns);
      echo "</pre>";
     for($i=0;$i < count($towns);$i++) //Считаем количество записей с каждым городом
      {
         $t = $towns[$i];
         $query = mysql_query("
         SELECT (
                 SELECT COUNT( town )
                 FROM  `phone`
                 WHERE  `town` =  '$t'
                ) AS a,
                 (
                   SELECT COUNT( town )
                   FROM  `list`
                   WHERE town =  '$t'
                ) AS b");
         $row = mysql_fetch_row($query);
         $count = $row[0] + $row[1]; //Общие количество с двух таблиц
         $town[$count] = $t; // Ставим в ключ количество записей в значение название города
       
     
      }
echo "<pre>";
         print_r($town);
echo "</pre>";

Но не работает корректно.
Выводит 

Array
(
    [0] => Николаев
    [1] => Буковель
    [2] => Киев
    [3] => харьков
)
Array
(
    [5] => Николаев
    [1] => харьков
)

Куда теряются остальные города?
--

-- Структура таблицы `list`

--




CREATE TABLE IF NOT EXISTS `list` (
  `id` int(6) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `phone` varchar(24) NOT NULL,
  `town` varchar(50) NOT NULL,
  `auto` varchar(30) NOT NULL,
  `time_o` int(255) NOT NULL,
  `time_open` int(255) NOT NULL,
  `time_end` int(255) NOT NULL,
  `status` varchar(2) NOT NULL,
  `manager` int(6) NOT NULL,
  `comment` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

--

-- Структура таблицы `phone`

--

 



CREATE TABLE IF NOT EXISTS `phone` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `name` varchar(70) NOT NULL,
  `phone` varchar(20) NOT NULL,
  `town` varchar(60) NOT NULL,
  `auto` int(2) NOT NULL,
  `time` int(255) NOT NULL,
  `status` int(2) NOT NULL,
  `manager` int(3) NOT NULL,
  `comment` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;




Сообщение отредактировал alex159 - 15.5.2014, 16:24
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alex159
alex159
Topic Starter сообщение 15.5.2014, 16:33; Ответить: alex159
Сообщение #10


понял. Самое интересно что я понимаю свою ошибку уже после того как напишу на форум :) .
Решил проблему так:

$town[$t] = $count;

Всем большое спасибо! 


Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Двумерные массивы
4 people2010 11381 5.8.2010, 0:52
автор: -people2010-


 



RSS Текстовая версия Сейчас: 19.3.2024, 6:32
Дизайн