Как я могу вернуть массив в функции php

#php

Вопрос:

Мне нужен возвращаемый массив в функции. Когда я использовал это, возвращая этот массив ( ):

          function menuOlustur($ana_kategoriler){
         global $db;
         $alt_kategori_durum = '';
         $alt_kategori;
             foreach ($ana_kategoriler as $kategori) {
                 $alt_kategori = $db->rawQuery('select * from s_kategoriler where kategori = ' . $kategori['id'] . ' and durum=1 order by sira asc');              
             }
             return $alt_kategori;
     }
 

и я использовал это, возвращая еще один индекс в массиве.

          function menuOlustur($ana_kategoriler){
         global $db;
         $alt_kategori_durum = '';
         $alt_kategori;
             foreach ($ana_kategoriler as $kategori) {
                 $alt_kategori[] = $db->rawQuery('select * from s_kategoriler where kategori = ' . $kategori['id'] . ' and durum=1 order by sira asc');              
             }
             return $alt_kategori;
     }
 

Мой $ana_kategoriler-это массив, вызывающий такой запрос

 $ana_k_cek = $db->rawQuery('select id, kategori, adi_' . $dil . ' as adi,link_' . $dil . ' as link from s_kategoriler where m_id=5 and durum=1 order by sira asc ');
 

что я могу сделать ?

Комментарии:

1. Я вижу некоторые проблемы в вашем коде, но также можете ли вы опубликовать переменную od $ana_kategoriler перед вызовом функции menuOlustur? В вашем первом коде foreach не имеет смысла, так как $alt_kategori будет выводить запрос на последний «идентификатор» из вашего параметра $ana_kategor. Ваш второй код лучше, но, пожалуйста, замените $alt_kategori; на $alt_kategori = array();

Ответ №1:

ИЗМЕНИТЬ: исправлен запрос, не должен быть категорией = 1,2,3,4, но категорией В(1,2,3,4)

Я предлагаю изменить ваш код на:

 function menuOlustur($ana_kategoriler){
    global $db;
    /* first - collect all ids */
    $ids = array();
    foreach ($ana_kategoriler as $kategori) {
        $ids[] = $kategori['id'];         
    }
    /* return empty array if there is no ids, or return result of single query matching all results with given ids */
    return count($ids) > 0 ? $db->rawQuery('select * from s_kategoriler where kategori IN( ' . implode(",",$ids)  . ') AND durum=1 order by sira asc') : array();   
}
 

Комментарии:

1. kategori = ' . implode(",",$ids) не сработает. Это создаст недопустимый запрос: kategori = 1,2,3,4,5... . если вы хотите выбрать из списка, разделенного запятыми, вам нужно использовать WHERE kategori IN (1,2,3,4,...) .