#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() сделал свое дело.