2016-05-21 2 views
0

Мне нужна одна помощь. Мне нужно отсортировать массив, содержащий данные json, в соответствии с некоторым ключевым значением. Я объясняю свой массив ниже.Как отсортировать данные массива по ключевому значению с помощью PHP

$data=[ 
{device_type:"1",hit_type:"3",member_id:"96",name:"Gallery",rest_name:"Goro + Gun",summery_id:"22"}, 
{device_type:"1",hit_type:"1",member_id:"96",name:"Page",rest_name:"Goro + Gun",summery_id:"22"}, 
{device_type:"1",hit_type:"2",member_id:"96",name:"Map",rest_name:"Goro + Gun",summery_id:"22"}, 
{device_type:"1",hit_type:"2",member_id:"96",name:"Map",rest_name:"Goro + Gun",summery_id:"22"}, 
{device_type:"1",hit_type:"4",member_id:"90",name:"Phone",rest_name:"the livingroom",summery_id:"21"}, 
] 

У меня есть массив данных, который приведен выше. Мне нужно отсортировать его по member_id и подсчитывает hit_type и total hit, наконец, его необходимо сохранить в другом массиве. Мой ожидаемый выходной массив приведен ниже.

$result=[ 
{device_type:"1",member_id:"96",Page_hit:"1",Gallery_hit:"1",Map_hit:"2",Phone_hit:"0",Web_hit:"0",rest_name:"Goro + Gun",summery_id:"22",total_hit:"4"}, 
{device_type:"1",member_id:"90",Page_hit:"0",Gallery_hit:"0",Map_hit:"0",Phone_hit:"1",Web_hit:"0",rest_name:"the livingroom",summery_id:"21",total_hit:"1"} 
] 

Выше мой ожидается output.hit_type всегда будет считаться за member_id и таблица приводится ниже.

name  type 
Page  1 
Map  2 
Gallery 3 
Phone  4 
Web  5 

Пожалуйста, помогите мне сделать это.

Edit: Запрос из комментариев:

$sql = " 
SELECT s.summery_id, 
     s.member_id, 
     s.hit_type, 
     s.device_type, 
     s.counter, 
     s.date, 
     r.rest_name, 
     h‌​.NAME, 
     h.type 
FROM db_analytics_summery AS s 
     LEFT JOIN db_hit_type AS h 
       ON s.hit_type = h.type 
     LEFT JOIN db_restaurant_basic AS r 
       ON s.member_id = r.member_id 
ORDER BY s.summery_id DESC; 
"; 
+0

это из базы данных? – splash58

+0

Да, я могу получить 1-й массив из БД. – satya

+0

Я начал читать это и думал, что это дубликат FAQ http://stackoverflow.com/questions/2699086/sort-multi-dimensional-array-by-value, но чтение данных из базы данных, а затем сортировка его исключительно глупо , Используйте базу данных для сортировки. – symcbean

ответ

1

вы можете сделать это в запросе

SELECT s.device_type, 
    s.member_id, 
    sum(if(`hit_type`=1,1,0)) Page_hit, 
    sum(if(`hit_type`=3,1,0)) Gallery_hit, 
    ... 
    r.rest_name, 
    count(1) total_hit 
FROM db_analytics_summery AS s 
    LEFT JOIN db_hit_type AS h 
      ON s.hit_type = h.type 
    LEFT JOIN db_restaurant_basic AS r 
      ON s.member_id = r.member_idgroup by 
group by member_id 
ORDER BY s.summery_id DESC; 
+0

У меня есть этот запрос '$ sql =" select s.summery_id, s.member_id, s.hit_type, s.device_type, s.counter, s.date, r.rest_name, h.name, h.type "; \t \t $ sql. = "От db_analytics_summery as s"; \t \t $ sql. = "Left join db_hit_type as h on s.hit_type = h.type"; \t \t $ sql. = "Left join db_restaurant_basic as r on s.member_id = r.member_id"; \t \t $ sql. = "Order by s.summery_id desc"; \t \t $ res = mysqli_query ($ connect, $ sql); '. – satya

+0

Можете ли вы изменить здесь, чтобы я мог получить ожидаемый результат, как описано выше. – satya

+0

Хорошо, вы можете решить мою проблему, пожалуйста.? – satya

Смежные вопросы