2014-02-21 5 views
-1

Новое для PHP, поэтому не уверен, что это лучший способ. В основном у меня есть набор записей с результатами, теперь я могу сделать 3 или 4 запроса & вернуть результаты по мере необходимости, но я подумал, что было бы более эффективно иметь один запрос и фильтровать результаты в массиве по мере необходимости ,php array_filter по дате

Я получаю результаты в массиве, теперь я хочу отображать результаты по дням недели и месяца, поэтому для меня имеет смысл цитировать массив 3 раза в течение дня, недели и месяца, а не 3 вызова в базу данных.

Первый вопрос - это лучший способ в PHP ???

Во-вторых, я не могу решить, как использовать array_filter ($ array_name, DATE?) Я не могу получить часть даты.

Массив/записей может быть:

название, цель, дата

и я хочу, чтобы показать результаты этого день, неделю & месяц.

Так что я получил:

array_filter($staff_tagret_results,"evaldate"); 

И функция:

function evaldate($x) { 
    if($staff_tagret_results == DAY/WEEK/MONTH){ 
     return true; 
    } 
} 

Но я не могу узнать, как целевая дату поданную массива и сравнить с сегодняшним днем?

Спасибо за любой совет.

ARRAY СОДЕРЖАНИЕ:

Array(
    [0] => Array(
     [staff_id] => 11[0] => 11[work_date] => 2014 - 02 - 12[1] => 2014 - 02 - 12[target_set] => 115[2] => 115 
    ) [1] => Array(
     [staff_id] => 4[0] => 4[work_date] => 2014 - 02 - 12[1] => 2014 - 02 - 12[target_set] => 115[2] => 115 
    ) [2] => Array(
     [staff_id] => 9[0] => 9[work_date] => 2014 - 02 - 12[1] => 2014 - 02 - 12[target_set] => 115[2] => 115 
    ) [3] => Array(
     [staff_id] => 11[0] => 11[work_date] => 2014 - 02 - 12[1] => 2014 - 02 - 12[target_set] => 115[2] => 115 
    ) [4] => Array(
     [staff_id] => 4[0] => 4[work_date] => 2014 - 02 - 12[1] => 2014 - 02 - 12[target_set] => 115[2] => 115 
    ) [5] => Array(
     [staff_id] => 9[0] => 9[work_date] => 2014 - 02 - 12[1] => 2014 - 02 - 12[target_set] => 115[2] => 115 
    ) [6] => Array(
     [staff_id] => 11[0] => 11[work_date] => 2014 - 02 - 12[1] => 2014 - 02 - 12[target_set] => 240[2] => 240 
    ) [7] => Array(
     [staff_id] => 4[0] => 4[work_date] => 2014 - 02 - 12[1] => 2014 - 02 - 12[target_set] => 240[2] => 240 
    ) [8] => Array(
     [staff_id] => 9[0] => 9[work_date] => 2014 - 02 - 12[1] => 2014 - 02 - 12[target_set] => 240[2] => 240 
    ) [9] => Array(
     [staff_id] => 4[0] => 4[work_date] => 2014 - 02 - 12[1] => 2014 - 02 - 12[target_set] => 180[2] => 180 
    ) [10] => Array(
     [staff_id] => 9[0] => 9[work_date] => 2014 - 02 - 12[1] => 2014 - 02 - 12[target_set] => 180[2] => 180 
    ) 
) 
+0

Показать содержание исходного массива – hindmost

+0

Done, жаль, что я не стал поскольку это только поле даты, которое я хотел отфильтровать. – Paul

+0

Сделайте свой код читаемым – hindmost

ответ

0

Так как я не могу комментировать из-за не имея достаточно репутации:

Если вы посмотрите на исходное сообщение вы видите, что то, что Хиндмост означает «сделать свой код читаемым»

Возвращаясь к вашему вопросу:

Я смущен, почему у вас есть все значения в массивах 2 х:

Array ( 
     [staff_id] => 11 [0] => 11 
     [work_date] => 2014-02-12 [1] => 2014-02-12 
     [target_set] => 115 [2] => 115) 

Если я сделать простой запрос на выборку, я получаю:

Array 
(
    [0] => Array 
     (
      [staff_id] => 4 
      [work_date] => 2014-02-18 
      [target_set] => 115 
     ) 

    [1] => Array 
     (
      [staff_id] => 9 
      [work_date] => 2014-02-20 
      [target_set] => 115 
     ) 

    [2] => Array 
     (
      [staff_id] => 11 
      [work_date] => 2014-02-20 
      [target_set] => 115 
     ) 

) 

Если вы хотите, чтобы отсортировать массив:

foreach ($aArray as $key => $row) { 
    $date[$key] = $row['work_date']; 
} 

array_multisort($date, SORT_DESC, $aArray); 

Это поможет вам:

Array 
(
    [0] => Array 
     (
      [staff_id] => 9 
      [work_date] => 2014-02-20 
      [target_set] => 115 
     ) 

    [1] => Array 
     (
      [staff_id] => 11 
      [work_date] => 2014-02-20 
      [target_set] => 115 
     ) 

    [2] => Array 
     (
      [staff_id] => 4 
      [work_date] => 2014-02-18 
      [target_set] => 115 
     ) 

) 

Это так, как я это сделал. Там может быть проще :-)

Марк

EDIT: Измененное направление сортировки, так что изменение в массиве видна

+0

Спасибо за это, но я не думаю, что это то, что я ищу. Я хочу, чтобы фильтр не сортировал его. – Paul

+0

в порядке. Извините за недопонимание. Вы пробовали array_filter (http://de3.php.net/manual/de/function.array-filter.php) Вы также можете сделать это вручную: 'Еогеасп ($ aArray в $ стоимости) {\t \t , если ($ значение [ 'work_date'] == дате ("ГМД") \t { \t $ фильтруется [] = $ значение; \t} } ' – Mark

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