使用数组中的数据而无需foreach

时间:2015-04-08 14:16:09

标签: php arrays foreach

我的模型中有一个函数:

 public function get_learning_category_list() {
 $categorias = $this->db->select('t1.id, t1.title, t1.metadata, t1.meta_title, t1.description, t1.meta_description, t1.meta_spam, t1.url, t1.alt_img')
        ->from('learning_category t1')
        ->join('learning_rel_category t4', 't1.id = t4.category_id', 'left')
        ->join('learning t2', 't4.learning_id = t2.id', 'left')
        ->join('learning_rel_language t3', 't2.id = t3.learning_id', 'left')
        ->where('t3.language', $this->language)
        ->group_by('t1.id')
        ->get()->result_array();
    foreach($categorias as $c){
        $total = $this->db->select('count(learning_rel_language.learning_id) as total', false)
        ->from('learning')
        ->join('learning_rel_language', 'learning.id = learning_rel_language.learning_id', 'inner')
        ->join('learning_rel_category', 'learning.id = learning_rel_category.learning_id', 'inner')
        ->where('learning_rel_category.category_id', $c['id'])
        ->where('learning_rel_language.language', $this->language)
        ->group_by('learning_rel_language.language')->get()->first_row('array');

        $metadata = json_decode($c['metadata']);
        $tt = $c['title'];
        $url = $c['url'];
        if($this->language != 'pt_br'){
            $tt = $metadata->{$this->language};
            $tt_pt_br = $c['title'];
        }

        $return[] = array('url' => $url, 'title'=>$tt, 'id'=>$c['id'], 'total'=>$total['total'], 'title_pt_br'=>$tt_pt_br);

    }

    return $return; //$categorias;
}

这会产生一个包含学习列表的数组:

Array ( [0] => Array ( [url] => [title] => Cursos sobre como gerar leads qualificados [id] => 2 [total] => 6 [title_pt_br] => ) [1] => Array ( [url] => [title] => Cursos de Social Media Marketing [id] => 3 [total] => 2 [title_pt_br] => ) [2] => Array ( [url] => [title] => Cursos de SEO e otimização de sites [id] => 4 [total] => 3 [title_pt_br] => )

但是我需要在模型的另一个函数中使用这些学习中的数据(标题,id等):

public function url_format_category($category, $lang_domin) {
    if (lang('abbr') == 'en_US')
        $lang_domin = 'en/';
    else if (lang('abbr') == 'es_US')
        $lang_domin = 'es/';

    $categorias = $this->learn->get_learning_category_list();
    print_r($categorias);
    foreach($categorias as $cat){
        print_r($cat);
        $cat = (object) $cat;
        if($cat->title != '') {


            $return = strtolower(url_title($cat->title)).'-cmdo-'.$cat->id;
        }else{
            $return = 'cursos-de-marketing-digital-online-'.$cat->id;
        }   
    return $return;   
    }

我这样做了,但是foreach总是产生与我相同的独立数据。如何在不使用foreach的情况下使用此数组中的数据?

1 个答案:

答案 0 :(得分:1)

如果您想检查$category是否在您从该模型中获取的那些titles内,那么您可以不断检查,如果可以的话,然后转换标题并将其返回如果没有,则返回默认值。

public function url_format_category($category, $lang_domin) 
{
    // what does this block do
    if (lang('abbr') == 'en_US') {
        $lang_domin = 'en/';
    }
    else if (lang('abbr') == 'es_US') {
        $lang_domin = 'es/';
    }

    $categorias = $this->learn->get_learning_category_list();
    $title = '';
    foreach($categorias as $cat) {
        // if its inside titles (checker)
        if($cat['title'] == $category) {
            $title = strtolower(url_title($title)).'-cmdo-'.$cat['id'];
            return $title;
        } else {
            $title = 'cursos-de-marketing-digital-online-'.$cat['id']; 
        }

    }

    return $title;
}