Чтобы сделать это просто вот что у меня естьPHP Еогеасп получить последнюю дату для всех значений
1) Массив имя:
array (size=953)
0 => string 'name1' (length=5)
1 => string 'name2' (length=5)
2) Еогеасп из курсора с водителем MongoDB:
foreach($cursor as $key => $document) {
}
В этот foreach я ищу, чтобы получить самую последнюю дату для каждого name
. Я повторяю самую последнюю дату до самой старой даты, и я не хочу, чтобы цикл продолжался, если у меня есть самая последняя дата для каждого name
.
Итак, как мог я цикле, пока у меня есть дата для каждого имени в массив? Могло быть много данных, поэтому я хотел бы сделать этот цикл лучше, чем мое старое решение.
Возможно, что-то вроде этого?
foreach($cursor as $key => $document) {
if (!in_array($document->color->name, $array)) {
$position[] = array(
'name' => $document->color->name,
'dateTime' => $document->color->dateTime,
);
}
$array[] = $document->color->name;
}
Решение
foreach($cursor as $key => $document) {
if(!isset($array[$document->color->name])) {
$position[] = array(
'name' => $document->color->name,
'dateTime' => $document->color->dateTime,
);
}
$array[$document->color->name]=true;
}
код хорошо, но лучше сделать '$ массив [$ document-> цвет-> имя] = TRUE;' и 'если (Исеть ($ массив [$ document-> цвет-> имя]!))' Bescause это быстрее, чем in_array(), и вы не заполняете свой массив бесполезными дубликатами. – JustOnUnderMillions
Похоже, он работает, спасибо большое. Я не могу видеть изменения производительности, но с тысячами данных этот метод должен быть лучше, нет? – Baptiste
Ключевая проверка php выполняется быстро, потому что она проверит ее один раз (php internal array stuff)! В поиске массива необходимо проверять все значения по отношению к поиску (возможно, забрасывать значения перед проверкой), пока он не будет найден. Сделайте свои тесты с большими массивами (500.000+), и вы увидите. – JustOnUnderMillions