2013-09-10 2 views
-1

У меня есть следующий код, который пытается отсортировать массив продуктов по его дате создания:usort вопрос параметр

private function sortProductsByDate(Product $a, Product $b) 
{ 
    if ($a->getCreated() == $b->getCreated()) { 
     return 0; 
    } 
    return ($a->getCreated() < $b->getCreated()) ? -1 : 1; 
} 

/** 
* Get the most 4 recent items 
* 
* @return \Doctrine\Common\Collections\Collection 
*/ 
public function getMostRecentItems() 
{ 
    $userMostRecentItems = array(); 
    $products = $this->getProducts(); 
    usort($products, "sortProductsByDate"); 

    foreach ($this->getProducts() as $product) { 
     ladybug_dump($product->getCreated()); 
    } 


    $mostRecentItems = $this->products; 
    return $this->isLocked; 
} 

Почему это дает мне эту ошибку:

Warning: usort() expects parameter 1 to be array, object given 

Идеи?

+1

Вы упускаете ''; на предыдущую строку , –

+0

@MichaelBerkowski теперь это другая ошибка – adit

+1

Да, вы будете в неправильном контексте для обратного вызова. Вы прочитали 'usort()' docs] (http://php.net/manual/en/function.usort.php), чтобы увидеть раздел о вызове функции члена класса в качестве обратного вызова? –

ответ

3

Я предполагаю, getProducts() возвращает \Doctrine\Common\Collections\Collection (наиболее вероятно ArrayCollection). Используйте

$products = $this->getProducts()->getValues(); 

Вы также хотите использовать

usort($products, array($this, 'sortProductsByDate')); 

и, наконец, использовать $products массив в вашем foreach

foreach ($products as $product) 
0

Я считаю, что ошибка понятна. Он сказал, что первым параметром должен быть массив, но вместо этого вы передаете объект, а это означает, что $this->getProducts(); возвращает объекты вместо массива.

Попробуйте это, чтобы узнать, что представляет собой тип переменных продуктов. Я сомневаюсь, что вы возвращаете ресурс базы данных вместо массива.

 
var_dump($products);