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]   

> Без описания
imedia
Отправлено: 18 Октября, 2015 - 10:41:30
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Июль 2015  


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




Как с помощью цикла for отсортировать следующий массив формируя новый массив
таким образом
//если в массиве уже встречалось значение поля которое проходим
//то фиксировать данный ключ многомерного массива как еще один ключ поля которое проходим
PHP:
скопировать код в буфер обмена
  1.  
  2. (
  3.     [0] => Array
  4.         (
  5.             [id] => 1
  6.             [filter_item] => imediasun
  7.             [filter_page] => 1
  8.             [filter_type] => автор
  9.         )
  10.  
  11.     [1] => Array
  12.         (
  13.             [id] => 2
  14.             [filter_item] => clasic_art_blog
  15.             [filter_page] => 1
  16.             [filter_type] => шаблон
  17.         )
  18.  
  19.     [2] => Array
  20.         (
  21.             [id] => 2
  22.             [filter_item] => modern_art_blog
  23.             [filter_page] => 1
  24.             [filter_type] => шаблон
  25.         )
  26.  
  27.     [3] => Array
  28.         (
  29.             [id] => 3
  30.             [filter_item] => Коммент
  31.             [filter_page] => 1
  32.             [filter_type] => Комментарии
  33.         )
  34.  
  35.     [4] => Array
  36.         (
  37.             [id] => 4
  38.             [filter_item] => Дата
  39.             [filter_page] => 1
  40.             [filter_type] => Дата
  41.         )
  42.  
  43. )
  44.  

к примеру из этого массива получить следующий
PHP:
скопировать код в буфер обмена
  1.  
  2. (
  3.     [автор] => Array
  4.         (
  5.             [id] => 1
  6.             [filter_item] => imediasun
  7.             [filter_page] => 1
  8.            
  9.         )
  10.  
  11.     [шаблон] => Array
  12.         (
  13.            
  14. [0]
  15. (
  16.             [id] => 2
  17.             [filter_item] => clasic_art_blog
  18.             [filter_page] => 1
  19. )
  20.  
  21.    [1] => Array
  22.         (
  23.             [id] => 2
  24.             [filter_item] => modern_art_blog
  25.             [filter_page] => 1
  26.         )
  27.        
  28.         )
  29.  
  30.     [Комментарии] => Array
  31.         (
  32.             [id] => 3
  33.             [filter_item] => Коммент
  34.             [filter_page] => 1
  35.             [filter_type] =>
  36.         )
  37.  
  38.     [Дата] => Array
  39.         (
  40.             [id] => 4
  41.             [filter_item] => Дата
  42.             [filter_page] => 1
  43.            
  44.         )
  45.  
  46. )
  47.  

Именно с момощью цикла for
 
 Top
andrewkard
Отправлено: 18 Октября, 2015 - 14:00:13
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




imedia пишет:
Именно с помощью цикла for

Почему не foreach? Пробуйте:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $arr = array(
  3.     0=>array(
  4.         'id'=>'1',
  5.         'filter_item'=>'imediasun',
  6.         'filter_page'=>'1',
  7.         'filter_type'=>'автор',
  8.     ),
  9.     1=>array(
  10.         'id'=>'2',
  11.         'filter_item'=>'clasic_art_blog',
  12.         'filter_page'=>'1',
  13.         'filter_type'=>'шаблон',
  14.     ),
  15.      2=>array(
  16.         'id'=>'2',
  17.         'filter_item'=>'modern_art_blog',
  18.         'filter_page'=>'1',
  19.         'filter_type'=>'шаблон',
  20.     ),
  21.      4=>array(
  22.         'id'=>'2',
  23.         'filter_item'=>'modern_art',
  24.         'filter_page'=>'1',
  25.         'filter_type'=>'шаблон',
  26.     ),
  27.  
  28.     3=>array(
  29.         'id'=>'3',
  30.         'filter_item'=>'Коммент1',
  31.         'filter_page'=>'1',
  32.         'filter_type'=>'Комментарии',
  33.     ),
  34.     5=>array(
  35.         'id'=>'3',
  36.         'filter_item'=>'Коммент2',
  37.         'filter_page'=>'1',
  38.         'filter_type'=>'Комментарии',
  39.     ),
  40.     6=>array(
  41.         'id'=>'3',
  42.         'filter_item'=>'Коммент3',
  43.         'filter_page'=>'1',
  44.         'filter_type'=>'Комментарии',
  45.     ),
  46.  
  47. );
  48. $count = count($arr);
  49. //Новый массив
  50. $new = array();
  51. //Для тестирования существования ключей
  52. $test = array();
  53.  
  54. for ($i=0;$i<$count;$i++){
  55.     //Ключ массива
  56.     $key = $arr[$i]['filter_type'];
  57.     //С таким ключем уже есть
  58.     if (isset($new[$key])){
  59.         //Передвигаем первый массив глубже
  60.         if (empty($test[$key])){
  61.             $temp = $new[$key];
  62.             unset ($new[$key]);
  63.             $new[$key][] = $temp;
  64.             $test[$key] = 1;
  65.         }
  66.         //Добавляем новый элемент
  67.         $new[$key][]=array('id'=>$arr[$i]['id'],'filter_item'=>$arr[$i]['filter_item'],'filter_page'=>$arr[$i]['filter_page']);
  68.     } else {
  69.         $new[$key]=array('id'=>$arr[$i]['id'],'filter_item'=>$arr[$i]['filter_item'],'filter_page'=>$arr[$i]['filter_page']);
  70.     }
  71.  
  72. }
  73. echo '<pre>';
  74. print_r($new);
  75.  
 
 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