Фильтровать массив многомерных массивов по параметрам? - PullRequest
2 голосов
/ 03 ноября 2011

Я пытаюсь отфильтровать больше даты начала и окончания.

   <?php 
        /* 
         * filtering an array 
         */ 
        function filter_by_value ($array, $index, $value){ 
            if(is_array($array) && count($array)>0)  
            { 
                foreach(array_keys($array) as $key){ 
                    $temp[$key] = $array[$key][$index]; 

                    if ($temp[$key] == $value){ 
                        $newarray[$key] = $array[$key]; 
                    } 
                } 
              } 
          return $newarray; 
        } 
    ?> 

Пример:

<code><?php 
$results = array (
  0 => 
  array (
    'a' => 'U/H',
    'b' => 'Modification',
    'date' => '02/11/11',
    'h' => '17:15:13',
    'fullname' => 'First1 Name1',
    'desc' => 'Descript ',
  ),
  1 => 
  array (
    'a' => 'J/M',
    'b' => '',
    'date' => '03/11/11',
    'h' => '17:18:27',
    'fullname' =>  'First1 Name1',
    'desc' => 'Descript more '
  ),
);

$nResults = filter_by_value($results, 'fullname', 'First1 Name1'); 
echo '<pre>'; 
print_r($nResults); 
echo '
';Массив ([0] => Массив ([a] => U / H [b] => Модификация [дата] => 02/11/11 [h] => 17:15:13 [полное имя] => Имя1 Имя1[desc] => Descript) [1] => Массив ([a] => J / M [b] => [date] => 03/11/11 [h] => 17:18:27 [полное имя]=> First1 Name1 [desc] => Descript more))

Сейчас я хочу отфильтровать, что функция может фильтровать по start_date и end_date

, поэтому я изменяю

function filter_by_value ($array, $index, $value,$start_date,$end_date)

Кто-нибудь может Как я могу фильтровать в периоде даты?

1 Ответ

1 голос
/ 03 ноября 2011

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

Ваша новая функция будет выглядеть примерно так:

<?php 
function filter_by_date($array, $index, $start_date, $end_date) {
      $newarray = array();
      if(is_array($array) && count($array)>0)  
        { 
            $start_time = strtotime($start_date); //make sure your date is written as  
            $end_time = strtotime($end_date);     // dd/mm/YYYY, will also work with           
                                                 //hours etc

            foreach(array_keys($array) as $key){ 
                $temp[$key] = strtotime($array[$key][$index]); //$index will be date

                if ($temp[$key] >= $start_time && $temp[$key] <= $end_time ){ 
                    $newarray[$key] = $array[$key]; 
                } 
            } 
          } 
      return $newarray; 
}

?>

Для других примечаний и т. Д. Лучше всего заглянуть на страницу strtotime () на php.net!http://www.php.net/manual/en/function.strtotime.php

Конечно, вы также можете создать его в той же функции, поэтому вам не нужно писать больше функций:

if ($index == ('date' || 'h')) {
   //the content of filter by date, or the function itself
} else {
   //the content of your first function
}
...