2015-12-17 5 views
3
{ 
m: "1", 
total: "6", 
r: [ 
{ 
job_id: "472", 
category: "plumbing", 
job_cost: "350", 
posted_on: "17 Dec 2015", 
completed_on: "17 Dec 2015", 
job_final_status: "1" 
}, 
{ 
job_id: "459", 
category: "electrical", 
job_cost: "600", 
posted_on: "16 Dec 2015", 
completed_on: "16 Dec 2015", 
job_final_status: "1" 
}, 
{ 
job_id: "457", 
category: "electrical", 
job_cost: "1000", 
posted_on: "16 Dec 2015", 
completed_on: "16 Dec 2015", 
job_final_status: "1" 
}, 
{ 
job_id: "456", 
category: "carpentry", 
job_cost: "350", 
posted_on: "16 Dec 2015", 
completed_on: "16 Dec 2015", 
job_final_status: "1" 
}, 
{ 
job_id: "454", 
category: "electrical", 
job_cost: "450", 
posted_on: "16 Dec 2015", 
completed_on: "16 Dec 2015", 
job_final_status: "1" 
}, 
{ 
job_id: "433", 
category: "plumbing", 
job_cost: "400", 
posted_on: "15 Dec 2015", 
completed_on: "15 Dec 2015", 
job_final_status: "1" 
} 
] 
} 

Выше ответа моего веб-сервиса. Я хочу получить результат массива ('r'), как, во-первых, сортировать по названию категории, а если имя категории одинаково, то результат для этой категории должен быть отсортирован по job_cost выше до нижнего.Сортировка по цене и названию

Таким образом, мой желаемый результат, как показано ниже:

{ 
m: "1", 
total: "6", 
r: [ 
{ 
job_id: "456", 
category: "carpentry", 
job_cost: "350", 
posted_on: "16 Dec 2015", 
completed_on: "16 Dec 2015", 
job_final_status: "1" 
}, 
{ 
job_id: "457", 
category: "electrical", 
job_cost: "1000", 
posted_on: "16 Dec 2015", 
completed_on: "16 Dec 2015", 
job_final_status: "1" 
}, 
{ 
job_id: "459", 
category: "electrical", 
job_cost: "600", 
posted_on: "16 Dec 2015", 
completed_on: "16 Dec 2015", 
job_final_status: "1" 
}, 
{ 
job_id: "454", 
category: "electrical", 
job_cost: "450", 
posted_on: "16 Dec 2015", 
completed_on: "16 Dec 2015", 
job_final_status: "1" 
}, 
{ 
job_id: "433", 
category: "plumbing", 
job_cost: "400", 
posted_on: "15 Dec 2015", 
completed_on: "15 Dec 2015", 
job_final_status: "1" 
}, 
{ 
job_id: "472", 
category: "plumbing", 
job_cost: "350", 
posted_on: "17 Dec 2015", 
completed_on: "17 Dec 2015", 
job_final_status: "1" 
} 
] 
} 
+0

при извлечении этих записей из базы данных, в то время вы можете сортировать правильно? – Butterfly

+0

Вы используете 'uasort()' –

+0

Используйте 'json_decode ($ data, true)' для получения ассоциативного массива. Затем вы можете предоставить пользовательскую функцию сортировки для 'usort()', чтобы отсортировать массив так, как вы хотите. – Jonathon

ответ

1

Вот как бы я решил вашу проблему.

Сначала вы расшифровать информацию с:

$r = json_decode($yourJSONstring); 

Затем вы можете сделать пустой массив, который вы будете наполняться происходящие категории:

$occurring = array(); 

, то вы можете объединить массивы с одной и той же категории путем их петли следующим образом:

foreach ($r as $item) { 
    if (isset($occurring [$item['category']])) { 
     $occurring [$item['category']][] = $item; 
    } else { 
     $occurring [$item['category']] = array(); 
     $occurring [$item['category']][] = $item; 
    } 
} 

Тогда вы можете сортировать такие:

foreach ($occurring as $key => $item) { 
    $occurring[$key] = Classname::array_sort_by_column($item,"job_cost",SORT_DESC); 
} 

С функцией, как это:

static public function sort_by_column($sortArray, $columnName, $sortDirection = SORT_ASC) { 
    $sortCol = array(); 

    foreach ($sortArray as $key => $row) { 
     $sortCol [$key] = $row[$columnName]; 
    } 

    array_multisort($sortCol , $sortDirection, $sortArray); 

    return $sortArray; 
} 

Я надеюсь, что это решает проблему :)

+0

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

1

Во-первых, огонь MYSQL запрос для сортировать по FILED после этого вы должны использовать сортировку массива по значению соответственно uasort() функции. Попробуйте, может быть, это поможет вам.

+0

да, .. позвольте мне попробовать –

1

Во-первых, огонь запрос MYSQL для сортировать по FILED после этого вы должны использовать массив сортируйте по значению, соответственно, функцию uasort(). Попробуйте, может быть, это поможет вам.

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