Вынести данные с определенной даты в массив php

Я хочу извлечь данные из следующего массива, где ключ 3 = 2017-10-27:

Array
(
[0] => Array
(
[0] => 65604
[1] => 1
[2] => 0
[3] => 2017-09-04 18:22:34
)

[1] => Array
(
[0] => 69
[1] => 29
[2] => 0
[3] => 2017-10-27 07:27:59
)

[2] => Array
(
[0] => 70
[1] => 1
[2] => 0
[3] => 2017-09-10-27:44:13
)

[3] => Array
(
[0] => 71
[1] => 5
[2] => 0
[3] => 2017-09-05 07:52:54
)

[4] => Array
(
[0] => 72
[1] => 28
[2] => 0
[3] => 2017-09-05 07:54:38
)

[5] => Array
(
[0] => 73
[1] => 18
[2] => 0
[3] => 2017-09-05 07:54:53
)

AS массив слишком большой и содержит около 20000 данных. Я хочу вытащить только те данные, которые мне нужны. Я использовал цикл foreach, но это заняло у меня слишком много времени, так как я также хочу обновить базу данных

foreach($array as $k=>$val){
$all = new DateTime($val[3]);
$hun = $all->format('H:i:s');
$date= $all->format('Y-m-d');
$id= $val[1];
if($date=='2017-10-27'){
//$dbh->query("UPDATE table SET date='$date' WHERE id='$id' AND date IS NULL");
}
}

База данных не обновляется, print_r () заняла около 5 минут. Любой лучший способ отфильтровать только те данные, которые мне нужны.

0

Решение

Используйте эту функцию для переиндексации вашего массива:

function reindex($arr, $commonIndex){
$res = array();
foreach( $arr as $one=>$two)
$res[$two[$commonIndex]] = $two;
return $res;
}

Использование:

$res = reindex($arr, 3);
echo $res['2017-10-27'];
1

Другие решения

Как ответ на ваш комментарий:

Пример структуры:

array(
"2017-10-10" => array(  /* this date is just for filtering and structure purpose */
69,
29,
0,
"2017-10-27 07:27:59" /* optional if you still want to store the date + time in the element */
),
"2017-10-10" ... etc.
)
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector