Как я могу выполнить поиск по массиву с помощью списка массивов в php?

#php #arrays

Вопрос:

Добрый день, ребята!

Пожалуйста, я работаю над платежной системой, которая должна иметь возможность проверять и отображать месяцы года, когда участник не производил платеж.

Для достижения этой цели я получу месяцы года, в течение которого он/она произвел платеж, и проведу его через множество месяцев с января по декабрь.

т.е.

 $array_of_months = array('January','February','March','April','May','June','July','August','September','October','November','December');

$months[] = '';
$this_year = date('Y');
$stmt = $this->db->get_where('payment',['year'=>$this_year,'member_id'=>2]);
$result = $stmt->result();
foreach($result as $key => $val):
   $months[] = $val->month;
endforeach;
 

Чтобы получить месяцы, которые не совпадали с оплаченными месяцами года, я использую array_search (), и код, как показано ниже:

 if($key = array_search($months, $array_of_months) !== false):
   unset($arrays_of_months[$key]);
else:
   echo 'Nil';
endif;
 

Вместо того, чтобы получать результат блока IF, что я получаю результат блока ELSE.

Это полный код:

 $arrays_of_months = array('January','February','March','April','May','June','July','August','September','October','November','December');
$months = array();
$this_year = date('Y');
                                                    
$stmt = $this->db->get_where('payment',['year'=>$this_year]);
$result = $stmt->result();
foreach($result as $key => $val):
   $months[] = $val->month;
endforeach;

if($key = array_search($months, $arrays_of_months) !== false):
    unset($arrays_of_months[$key]);
else:
    echo 'Nil';
endif;
 

Пожалуйста, что я делаю не так?

Спасибо..

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

1. array_search сначала берет иглу, а затем стог сена — вы передали их в обратном порядке.

2. $months = implode(",",$months); $months = explode(",", $months); — а для чего это должно быть хорошо? Делая одно, а затем делая прямо противоположное с результатом первого — фактически ничего не делает.

3. не могли бы вы использовать array_diff()

4. @CBroe даже при нынешней расстановке результатов все равно получается тот же блок ELSE.

5. Попытка использовать array_search с двумя массивами в качестве параметра также имеет мало смысла. Ваш лучший выбор здесь, если вы хотите сделать это после цикла, действительно array_diff таков .

Ответ №1:

Спасибо, ребята, array_diff() сделал свое дело.