Как отфильтровать массив на основе условий mutliple PHP

#php #arrays #filter

Вопрос:

У меня есть массив ниже, и я хочу изменить выход на основе некоторых условий

    foreach($courses as $c) {
$c->type == "fulltime" ? 'full' : 'part';
                    $f = new stdClass();
                    $f->course_id = $c->course;
                    $f->form =  $c->id;
                    $f->module = $c->module;
                    $f->unread = $unreadcount;
                    $f->type = $c->type;
                    $f->posts = $posts;   
                
                 $results[$c->course_id][$c->type][] = $f;
    }
 

текущая структура:

  [course_id]{
       full : [
                       $f->form =  $c->id;
                    $f->module = $c->module;
                    $f->type = $c->type; [ex: fulltime, parttime]
                  
            ]
    part : []
    posts : []
    }
 

Условия :

if ($enableFulltimeCourse =1 amp;amp; $unreadcount >0) -> показать полностью[] и часть [], иначе она пуста > if ($enableParttimeCourse =1 amp;amp; $f->type == "part") -> показать часть [], иначе она пуста

Что я пытался

 if ($enableFulltimeCourse =1 amp;amp; $unreadcount >0){
                    unset($f);
                }
                $results[$forum->course][$forum->type][] = $f;
 

пожалуйста, посоветуйтесь

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

1. не могли бы вы объяснить немного подробнее

2. Данные о курсах @Jerson $содержат результаты очных и частичных курсов и непрочитанные элементы в зависимости от типа курса. через мой интерфейс я получаю значения, и мне нужно подготовить массив на основе этих условий. Пример: $enableFulltimeCourse имеет значение, а непрочитанные списки не равны 0, тогда я хочу показать вложенные массивы статей и сообщений на полный рабочий день. в остальном эти вложенные массивы должны быть пустыми. Я попытался сбросить($f) в зависимости от условий, но это не сработало.

3. @NicoHaase if ($enableFulltimeCourse =1 amp;amp; $unreadcount >0) { сбросить($f);} Я пробовал так, но это не сработало. он возвращает значение null для каждого элемента.

4. Почему вы используете unset для этого? Почему бы не использовать array_filter ?

Ответ №1:

Вам нужно использовать == или === для сравнения. Кроме того, не уверен, что вы имели в виду, говоря «показать X», иначе оно пустое, но вот как сформировать ваше условие. Я не думаю, что вы имели в виду unset($f); — так как это приведет к удалению всего вашего объекта.

 if ($enableFulltimeCourse == 1)
  if ($unreadcount >0){
    // show full[] and part[] else its empty
    foreach($f->full as $item) {
       // loop through the full
    }

    foreach($f->part as $item) {
       // loop through the part
    }
  } else if ($f->type == "part") {
    unset($f->full); //show part[] else its empty
    foreach($f->part as $item) {
       // loop through the part
    }
  }
}
$results[$forum->course][$forum->type][] = $f;
 

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

1. @dilzdilz — — Это помогло решить ваш вопрос? Если да, пожалуйста, примите в качестве ответа. Спасибо