Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка двумерных массивов 
:(
    Опции темы
SDEVIL
Дата 6.10.2008, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 30.10.2006

Репутация: 1
Всего: 1



Есть 3 двумерных массива, необходимо к первому прибавить соответствующие значения второго и вычесть соответствующие значения третьего, если необходимых значений нет в первом массиве то добавить их:
Пример, первый массив:
Код

array(3) {
  [0]=>
  array(3) {
    ["p_id"]=>
    string(1) "4"
    ["p_name"]=>
    string(4) "Ниаменование"
    ["quantity"]=>
    string(5) "44.00"
  }
  [1]=>
  array(3) {
    ["p_id"]=>
    string(1) "3"
    ["p_name"]=>
    string(4) "БКК"
    ["quantity"]=>
    string(5) "34.00"
  }
  [2]=>
  array(3) {
    ["p_id"]=>
    string(1) "2"
    ["p_name"]=>
    string(22) "СТТ"
    ["quantity"]=>
    string(4) "5.00"
  }
}

К первому массиву прибавить второй массив, прибавить значения ["quantity"], а сверить существует ли такой элемент по ["p_id"]:
Код

array(2) {
  [0]=>
  array(3) {
    ["p_id"]=>
    string(1) "2"
    ["p_name"]=>
    string(4) "СТТ"
    ["quantity"]=>
    string(5) "44.00"
  }
  [1]=>
  array(3) {
    ["p_id"]=>
    string(1) "3"
    ["p_name"]=>
    string(4) "НВТ"
    ["quantity"]=>
    string(5) "34.00"
  }
}

В итоге должен получиться такой массив:
Код

array(4) {
  [0]=>
  array(3) {
    ["p_id"]=>
    string(1) "4"
    ["p_name"]=>
    string(4) "Ниаменование"
    ["quantity"]=>
    string(5) "44.00"
  }
  [1]=>
  array(3) {
    ["p_id"]=>
    string(1) "3"
    ["p_name"]=>
    string(4) "БКК"
    ["quantity"]=>
    string(5) "34.00"
  }
  [2]=>
  array(3) {
    ["p_id"]=>
    string(1) "2"
    ["p_name"]=>
    string(22) "СТТ"
    ["quantity"]=>
    string(4) "49.00"
  }
  [4]=>
  array(3) {
    ["p_id"]=>
    string(1) "3"
    ["p_name"]=>
    string(4) "НВТ"
    ["quantity"]=>
    string(5) "34.00"
  }
}

И по такой же аналогии вычесть третий массив, если элемента нет добавить туда...
Как реализовать пока даже идеи нет  smile 
Может кто сталкивался с похожим?  smile 
--------------------
Подпись сбежала к другому юзверю....
PM MAIL   Вверх
Dima 2015
Дата 6.10.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 16.3.2008
Где: SPb

Репутация: 2
Всего: 2



SDEVIL, а как на счет такой мысли?

Код

$temp_arr_1 = array_diff($arr_1, $arr_2); // Берем из 1го массива те элементы, которых нет во 2м
$temp_arr_2 = array_diff($arr_2, $arr_1); // Берем из 2го массива те элементы, которых нет в 1м

$result_arr = array_merge($temp_arr_1, $temp_arr_2); // Сливаем то, что получилось...


Так с ходу трудно сказать получится ли то что ты хочешь, но попробуй.. а там поглядим ;)

Добавлено через 1 минуту и 22 секунды
Хотя чувствую чтото не то.. речь про 3 массива шла.

Добавлено через 2 минуты и 33 секунды
Не... надо поточнее задачу описать, так не понятно. Ты 2 массива привел, а в начале говорил что исходных 3. Давай еще раз какие 3 исходных массива и что хочется получить...
PM MAIL ICQ   Вверх
SDEVIL
Дата 6.10.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 30.10.2006

Репутация: 1
Всего: 1



В третьем массиве примерно следующее:
Этот массив вычитаем из получившегося сложением первого и второго

Код

array(2) {
  [0]=>
  array(3) {
    ["p_id"]=>
    string(1) "4"
    ["p_name"]=>
    string(4) "Ниаменование"
    ["quantity"]=>
    string(5) "10.00"
  }
  [1]=>
  array(3) {
    ["p_id"]=>
    string(1) "3"
    ["p_name"]=>
    string(4) "РРР"
    ["quantity"]=>
    string(5) "1.00"
  }
}


И тогда уже результирующий массив будет равен:

Код

array(5) {
  [0]=>
  array(3) {
    ["p_id"]=>
    string(1) "4"
    ["p_name"]=>
    string(4) "Ниаменование"
    ["quantity"]=>
    string(5) "34.00"
  }
  [1]=>
  array(3) {
    ["p_id"]=>
    string(1) "3"
    ["p_name"]=>
    string(4) "БКК"
    ["quantity"]=>
    string(5) "34.00"
  }
  [2]=>
  array(3) {
    ["p_id"]=>
    string(1) "2"
    ["p_name"]=>
    string(22) "СТТ"
    ["quantity"]=>
    string(4) "49.00"
  }
  [3]=>
  array(3) {
    ["p_id"]=>
    string(1) "3"
    ["p_name"]=>
    string(4) "НВТ"
    ["quantity"]=>
    string(5) "34.00"
  }
  [4]=>
  array(3) {
    ["p_id"]=>
    string(1) "3"
    ["p_name"]=>
    string(4) "РРР"
    ["quantity"]=>
    string(5) "-1.00"
  }
}


Это сообщение отредактировал(а) SDEVIL - 6.10.2008, 17:32
--------------------
Подпись сбежала к другому юзверю....
PM MAIL   Вверх
Nigel
Дата 6.10.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


познаю мир
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 20.11.2007

Репутация: 7
Всего: 19



Dima 2015, у вас ничего не выведет.

SDEVIL, держи:
Код

$a = array(
       array("p_id"=>4, "p_name"=>"Наименование", "quantity"=>44.00),
       array("p_id"=>3, "p_name"=>"БКК", "quantity"=>34.00),
       array("p_id"=>2, "p_name"=>"СТТ", "quantity"=>5.00)
      );

$b = array(
       array("p_id"=>2, "p_name"=>"СТТ", "quantity"=>44.00),
       array("p_id"=>3, "p_name"=>"НВТ", "quantity"=>34.00)
      );

array_walk($a, create_function(
                '&$item, $key, $addon',
                '$p_id = $item["p_id"]; $i = 0; while($i<count($addon)){$t = array_shift($addon); if($t["p_id"]==$p_id){$item["quantity"]+=$t["quantity"];} };'
                   ), $b
        );

print_r($a);

C минусом аналогично
PM MAIL   Вверх
SDEVIL
Дата 6.10.2008, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 30.10.2006

Репутация: 1
Всего: 1



В итоге получается что к первому массиву добавились 2 новых значения которых изначально небыло и прошел расчет тех элементов которые были...
Во как... запутано, но проще что-то не получается объяснить  smile

Добавлено через 1 минуту и 43 секунды
Nigel, спасибо, сейчас попробую...
--------------------
Подпись сбежала к другому юзверю....
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.