Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Операции с многомерными массивами

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Lebemegal6
Отправлено: 27 Апреля, 2011 - 12:04:50
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Доброе время суток. Столкнулся с такой проблемой при написании диплома.
Есть массив дат допустим Array(1-1, 1-2, .... 12-31)
B есть 3ех мерный массив array("id" => "1 ... 99", "date"=>"1-1 ... 5-2", "count"=>" 1... 99")
Возможно ли сделать такчтоб вот из 3ех мерного массива получить несколько 2ух мерных
по id т.е: Id1("date"=>"1-1 ... 5-2", "count"=>" 1... 99"); Id2("date"=>"1-1 ... 5-2", "count"=>" 1... 99") и т.д, только id должны бить не key'и а именно значени
но это еще не все Закатив глазки
Дальше нужно сравнить полученные массивы с массивом дат Array(1-1, 1-2, .... 12-31) и
дополнить соответствующие массивы недостающими датами а соответствующие поля "count" за бить нулями.

Прошу сильно не ругать и больно не бить, я только учусь Подмигивание
 
 Top
Саныч Модератор
Отправлено: 27 Апреля, 2011 - 12:08:41
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




вы лучше пример кода дайте, что есть и что вы хотите получить, а так пока не очень понятно...


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Lebemegal6
Отправлено: 27 Апреля, 2011 - 12:13:34
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Да собстно давать то нечего пока что Огорчение
 
 Top
Stierus Супермодератор
Отправлено: 27 Апреля, 2011 - 12:34:22
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




1.нормально опишите задачу, сложно понять, что вы хотите. Если массив - то array(), если строка - то "...", у вас не понятно, где списки, где массивы, где строки, где что.
2. array("id" => "1 ... 99", "date"=>"1-1 ... 5-2", "count"=>" 1... 99") - это одномерный ассоциативный массив (все, что внутри скобок - строка), с чего вы его называете трехмерным? о_О

пример трехмерного массива:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  array(
  2.         1 => array(
  3.                 1 => array(
  4.                         1 => 'str1',
  5.                         2 => 'str2'
  6.                 )
  7.                 2 => array(
  8.                         1 => 'str1',
  9.                         2 => 'str2'
  10.                 )      
  11.         ),
  12.         2 => array(
  13.                 1 => array(
  14.                         1 => 'str1',
  15.                         2 => 'str2'
  16.                 )
  17.                 2 => array(
  18.                         1 => 'str1',
  19.                         2 => 'str2'
  20.                 )      
  21.         )
  22. )

доступ к элементу трехмерного массива data[1][2][2]
 
My status
 Top
Lebemegal6
Отправлено: 27 Апреля, 2011 - 13:31:29
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Прошу прощения, не совсем еще в массивах разбираюсь.


Массив дат:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.         0 = > '01-01',
  3.         1 = > '02-11',
  4.         2 = > '04-14',
  5.         3 = > '10-01',
  6.         4 = > '06-15'
  7. );
  8.  


То, что я назвал 3ех мерным массивом:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.         id => array(
  3.                 0 => '1',
  4.                 1 => '2',
  5.                 2 => '1',
  6.                 ),
  7.         date => array(
  8.                 0 = > '01-01',
  9.                 1 = > '02-11',
  10.                 2 = > '04-14'
  11.                 ),     
  12.         count => array(
  13.                 0 => 'str1',
  14.                 1 => 'str2',
  15.                 2 => 'str3'
  16.                 )
  17.         );
  18.  



Из этого массива нужно получить несколько массивов по значению id:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. ID1 array(
  3.         date => array(
  4.                 0 = > '02-11',
  5.                 1 = > '04-14'
  6.                 ),     
  7.         count => array(
  8.                 0 => 'str1',
  9.                 1 => 'str3'
  10.                 )
  11.         );
  12.  
  13. ID2 array(
  14.         date => array(
  15.                 0 = > '01-01'
  16.                 ),     
  17.         count => array(
  18.                 0 => 'str2'
  19.                 )
  20.         );
  21.  
  22.  


Вот эти 2 массива ID1 и ID2 нужно сравнить с DATE и дополнить соответствующие массивы недостающими датами а соответствующие поля "count" за бить нулями, чтоб получилось следующее:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. ID1 array(
  3.         date => array(
  4.                 0 = > '02-11',
  5.                 1 = > '02-11',
  6.                 2 = > '04-14',
  7.                 3 = > '10-01',
  8.                 4 = > '06-15'
  9.                 ),     
  10.         count => array(
  11.                 0 => 'str1',
  12.                 1 => 'str3',
  13.                 2 => '0',
  14.                 3 => '0',
  15.                 4 => '0',
  16.                 )
  17.         );
  18.  
  19.  

Надеюсь так понятнее Ниндзя
 
 Top
Lebemegal6
Отправлено: 29 Апреля, 2011 - 14:19:31
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Судя по всему задача не разрешима Огорчение
 
 Top
Stierus Супермодератор
Отправлено: 29 Апреля, 2011 - 18:54:57
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




любая задача разрешима, но я никак понять не могу, какими правилами ты руководствовался, что получил из
PHP:
скопировать код в буфер обмена
  1. #
  2.         id => array(
  3.                 0 => '1',
  4.                 1 => '2',
  5.                 2 => '1',
  6.                 ),
  7.         date => array(
  8.                 0 = > '01-01',
  9.                 1 = > '02-11',
  10.                 2 = > '04-14'
  11.                 ),    
  12.         count => array(
  13.                 0 => 'str1',
  14.                 1 => 'str2',
  15.                 2 => 'str3'
  16.                 )
  17.         );


вот это

PHP:
скопировать код в буфер обмена
  1.  
  2. ID1 array(
  3.         date => array(
  4.                 0 = > '02-11',
  5.                 1 = > '04-14'
  6.                 ),    
  7.         count => array(
  8.                 0 => 'str1',
  9.                 1 => 'str3'
  10.                 )
  11.         );
  12.  
  13. ID2 array(
  14.         date => array(
  15.                 0 = > '01-01'
  16.                 ),    
  17.         count => array(
  18.                 0 => 'str2'
  19.                 )
  20.         );

(Добавление)
если сможешь нормально рассказать, что нужно и с чем деалать что бы получить желаемое - то и мы помочь сможем, да и сам ты поймешь, что от тебя требуется Улыбка

(Отредактировано автором: 29 Апреля, 2011 - 18:57:06)

 
My status
 Top
Lebemegal6
Отправлено: 29 Апреля, 2011 - 22:01:43
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Попытаюсь объяснить. Вот есть у нас массив №1: все данные выбираются из БД в таком вот виде:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.         id => array(
  3.                 0 => '1',
  4.                 1 => '2',
  5.                 2 => '1',
  6.                 ),
  7.         date => array(
  8.                 0 = > '01-01',
  9.                 1 = > '02-11',
  10.                 2 = > '04-14'
  11.                 ),    
  12.         count => array(
  13.                 0 => 'str1',
  14.                 1 => 'str2',
  15.                 2 => 'str3'
  16.                 )
  17.         );
  18.  
  19.  

массив с ключами, в примере у нас только ключи(ID) 1 и 2
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. id => array(
  3.                 0 => '1',
  4.                 1 => '2',
  5.                 2 => '1',
  6.                 )
  7.  


Оставшаяся часть общего массива:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3.  date => array(
  4.                 0 = > '01-01',
  5.                 1 = > '02-11',
  6.                 2 = > '04-14'
  7.                 ),    
  8.         count => array(
  9.                 0 => 'str1',
  10.                 1 => 'str2',
  11.                 2 => 'str3'
  12.                 )
  13.  



в нем позиции 0 = > '01-01', 2 = > '04-14'
0 => 'str1', 2 => 'str3' соответствуют ID 1, исходя из массива №1, а оставшиеся ID 2


Т.о нужно эти позиции выдернуть в отдельный массив(
CODE (htmlphp):
скопировать код в буфер обмена
  1.         date => array(
  2.                 0 = > '02-11',
  3.                 1 = > '04-14'
  4.                 ),    
  5.         count => array(
  6.                 0 => 'str1',
  7.                 1 => 'str3'
  8.                 )
  9.         );
) для ID 1(так должен называться новый массив и
(
CODE (htmlphp):
скопировать код в буфер обмена
  1.                 0 = > '01-01'
  2.                 ),    
  3.         count => array(
  4.                 0 => 'str2'
  5.                 )
) для ID 2
 
 Top
Саныч Модератор
Отправлено: 29 Апреля, 2011 - 22:26:35
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




ну уже лучше, но все равно непонятен смысл всех этих манипуляций...

вот накидал примерно, смотрите, может оно
PHP:
скопировать код в буфер обмена
  1. $arr = array(
  2.         'id' => array(
  3.                 0 => '1',
  4.                 1 => '2',
  5.                 2 => '1',
  6.         ),
  7.         'date' => array(
  8.                 0 => '01-01',
  9.                 1 => '02-11',
  10.                 2 => '04-14'
  11.         ),    
  12.         'count' => array(
  13.                 0 => 'str1',
  14.                 1 => 'str2',
  15.                 2 => 'str3'
  16.         )
  17. );
  18. foreach($arr['id'] as $key => $value)
  19. {
  20.         ${'id'.$value}['date'][] = $arr['date'][$key];
  21.         ${'id'.$value}['count'][] = $arr['count'][$key];
  22. }
  23. print_r($id1);
  24. echo '<br>';
  25. print_r($id2);

(Отредактировано автором: 29 Апреля, 2011 - 22:28:51)



-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
DlTA
Отправлено: 29 Апреля, 2011 - 22:50:19
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




смысл совсем не понятен,
может стоит поставить запрос к базе иначе
и уже сразу получить желаемую структуру?!
 
 Top
Lebemegal6
Отправлено: 01 Мая, 2011 - 15:37:02
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Саныч, это именно то, что нужно !!! Спасибо большое!!!

А возможно ли теперь $id1 и $id2 сравнить с
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.         0 = > '01-01',
  3.         1 = > '02-11',
  4.         2 = > '04-14',
  5.         3 = > '10-01',
  6.         4 = > '06-15'
  7. );
  8.  


и дополнить $id1 и $id2 чтоб получилось примерно следующее
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. ID1 array(
  3.         date => array(
  4.                 0 = > '01-01',
  5.                 1 = > '04-14',
  6.                 2 = > '02-11',
  7.                 3 = > '10-01',
  8.                 4 = > '06-15'
  9.                 ),    
  10.         count => array(
  11.                 0 => 'str1',
  12.                 1 => 'str3',
  13.                 2 => '0',
  14.                 3 => '0',
  15.                 4 => '0',
  16.                 )
  17.         );
  18.  
 
 Top
Саныч Модератор
Отправлено: 01 Мая, 2011 - 16:03:46
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




а сами делать вы не пробовали?!
PHP:
скопировать код в буфер обмена
  1. $arr = array(
  2.         'id' => array(
  3.                 0 => '1',
  4.                 1 => '2',
  5.                 2 => '1',
  6.         ),
  7.         'date' => array(
  8.                 0 => '01-01',
  9.                 1 => '02-11',
  10.                 2 => '04-14'
  11.         ),    
  12.         'count' => array(
  13.                 0 => 'str1',
  14.                 1 => 'str2',
  15.                 2 => 'str3'
  16.         )
  17. );
  18. foreach($arr['id'] as $key => $value)
  19. {
  20.         ${'id'.$value}['date'][] = $arr['date'][$key];
  21.         ${'id'.$value}['count'][] = $arr['count'][$key];
  22. }
  23. print_r($id1);
  24. echo '<br>';
  25. print_r($id2);
  26.  
  27. $date = array(
  28.         0 => '01-01',
  29.         1 => '02-11',
  30.         2 => '04-14',
  31.         3 => '10-01',
  32.         4 => '06-15'
  33. );
  34. foreach($date as $val)
  35. {
  36.    if(!in_array($val,$id1['date']))
  37.    {
  38.       $id1['date'][] = $val;
  39.       $id1['count'][] = '0';
  40.    }
  41.    if(!in_array($val,$id2['date']))
  42.    {
  43.       $id2['date'][] = $val;
  44.       $id2['count'][] = '0';
  45.    }
  46. }

ну вот как-то так, но если честно - бред полнейший


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Lebemegal6
Отправлено: 05 Мая, 2011 - 15:25:46
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Да, это именно то что нужно, большое спасибо!!!
Правда вот реализовав данный скрипт я столкнулся с небольшой проблемой, которую ранее не предусмотрел

конкретно вот здесь и далее:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. foreach($arr['id'] as $key => $value)
  3. {
  4.         ${'id'.$value}['date'][] = $arr['date'][$key];
  5.         ${'id'.$value}['count'][] = $arr['count'][$key];
  6. }
  7. print_r($id1);
  8. echo '<br>';
  9. print_r($id2);


Проблема заключается в том, что это в примере id1 и id2, а на практике может быть id250 или id 2345. Возможно ли как нибудь, унифицировать данный скрипт:
CODE (htmlphp):
скопировать код в буфер обмена
  1. foreach($date as $val)
  2. {
  3.    if(!in_array($val,$id1['date']))
  4.    {
  5.       $id1['date'][] = $val;
  6.       $id1['count'][] = '0';
  7.    }
  8.    if(!in_array($val,$id2['date']))
  9.    {
  10.       $id2['date'][] = $val;
  11.       $id2['count'][] = '0';
  12.    }
  13. }
 
 Top
Саныч Модератор
Отправлено: 05 Мая, 2011 - 18:33:20
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




возможно все, но может быть вы все же начнете пробовать что-то делать сами, а не в тупую ждать решения?!

PHP:
скопировать код в буфер обмена
  1. $arr = array(
  2.         'id' => array(
  3.                 0 => '1',
  4.                 1 => '2',
  5.                 2 => '1',
  6.         ),
  7.         'date' => array(
  8.                 0 => '01-01',
  9.                 1 => '02-11',
  10.                 2 => '04-14'
  11.         ),    
  12.         'count' => array(
  13.                 0 => 'str1',
  14.                 1 => 'str2',
  15.                 2 => 'str3'
  16.         )
  17. );
  18. $ids = array();
  19. foreach($arr['id'] as $key => $value)
  20. {
  21.         ${'id'.$value}['date'][] = $arr['date'][$key];
  22.         ${'id'.$value}['count'][] = $arr['count'][$key];
  23.         $ids[] = $value;
  24. }
  25. $ids = array_unique($ids);
  26. print_r($ids); //проверка
  27.  
  28. $date = array(
  29.         0 => '01-01',
  30.         1 => '02-11',
  31.         2 => '04-14',
  32.         3 => '10-01',
  33.         4 => '06-15'
  34. );
  35. foreach($date as $val)
  36.         foreach($ids as $id)
  37.                 if(isset(${'id'.$id}) && !in_array($val,${'id'.$id}['date']))
  38.                 {
  39.                         ${'id'.$id}['date'][] = $val;
  40.                         ${'id'.$id}['count'][] = '0';
  41.                 }

з.ы. Но меня по прежнему мучает вопрос, где это можно преминить?! Хм

(Отредактировано автором: 05 Мая, 2011 - 18:35:36)



-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB