2017-02-20 19 views
1

Чтобы сделать это просто вот что у меня есть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; 
} 
+2

код хорошо, но лучше сделать '$ массив [$ document-> цвет-> имя] = TRUE;' и 'если (Исеть ($ массив [$ document-> цвет-> имя]!))' Bescause это быстрее, чем in_array(), и вы не заполняете свой массив бесполезными дубликатами. – JustOnUnderMillions

+0

Похоже, он работает, спасибо большое. Я не могу видеть изменения производительности, но с тысячами данных этот метод должен быть лучше, нет? – Baptiste

+0

Ключевая проверка php выполняется быстро, потому что она проверит ее один раз (php internal array stuff)! В поиске массива необходимо проверять все значения по отношению к поиску (возможно, забрасывать значения перед проверкой), пока он не будет найден. Сделайте свои тесты с большими массивами (500.000+), и вы увидите. – JustOnUnderMillions

ответ

1

код отлично,

, но лучше сделать $array[$document->color->name]=true;

и if(!isset($array[$document->color->name]))

bescause это ж а затем быстрее in_array(), и вы не будете заполнять свой массив бесполезными дубликатами.