#php #mysql
Вопрос:
Мы использовали приведенный ниже код для создания отчета о ходе работы для пользователей. Он проверяет массив для каждого пользователя в разделе _usermeta. Это работало до сих пор, потому что плагин, который создает данные, добавит ценность уроку только в том случае, если он будет завершен. Теперь он добавляет значение независимо и имеет второе значение для того, было ли оно завершено или нет. Есть какие-нибудь идеи о том, как это сделать?
/* php for the page itself */ foreach($usersemail['users'] as $userdata){ $dtd= get_user_meta($userdata['user_id'] ,'_sfwd-course_progress',true); ?gt; lt;trgt;lt;tdgt;lt;?php echo get_user_meta($userdata['user_id'],'first_name',true).' '.get_user_meta($userdata['user_id'],'last_name',true); ?gt;lt;/tdgt; lt;?php foreach($dtd as $dt){ if(array_key_exists('21414',$dt['lessons'])){ $lession_complete= false; echo "lt;tdgt;completed lt;/tdgt;"; }else{ echo "lt;tdgt; lt;/tdgt;"; } if(array_key_exists('21416',$dt['lessons'])){ $lession_complete= false; echo "lt;tdgt;completed lt;/tdgt;"; }else{ echo "lt;tdgt; lt;/tdgt;"; } if(array_key_exists('21418',$dt['lessons'])){ $lession_complete= true; echo "lt;tdgt;completed lt;/tdgt;"; }else{ echo "lt;tdgt; lt;/tdgt;"; }
/*example of table from _usermeta */ a:1:{i:21126;a:6:{s:7:"lessons";a:5:{i:21412;i:1;i:21414;i:0;i:21416;i:1;i:21418;i:1;i:21420;i:1;}s:6:"topics";a:5:{i:21412;a:0:{}i:21414;a:0:{}i:21416;a:0:{}i:21418;a:0:{}i:21420;a:0:{}}s:9:"completed";i:5;s:5:"total";i:5;s:7:"last_id";i:21420;s:6:"status";s:11:"in_progress";}}
Используя урок 21416 в качестве примера: мне нужно, чтобы он повторил «завершено», если и урок найден (21416), и если следующее за ним значение «i:1». По умолчанию используется пустой td, если значение равно i:0.
Заранее спасибо!
Ответ №1:
Если у вас уже есть значение in lessons 1
, которое, как вы знаете, завершено, вам просто нужно изменить свой цикл следующим образом::
foreach($dtd as $dt){ foreach($dt['lessons'] as $lesson_id =gt; $value) { if($value == 1){ $lession_complete= false; echo "lt;tdgt;completed lt;/tdgt;"; } else { echo "lt;tdgt; lt;/tdgt;"; } } }
Но если вам нужно искать по ключу, а не по идентификатору, подумайте об этом:
$needle_keys=['21414', '21416','21418']; foreach($dtd as $dt){ $lessons_keys = array_keys($dt['lessons']); foreach($lessons_keys as $key){ if(in_array($key, $needle_keys)){ if($dt['lessons'][$key]){ $lession_complete= false; echo "lt;tdgt;completed lt;/tdgt;"; } else { echo "lt;tdgt; lt;/tdgt;"; } } } }
Но в целом здесь вы можете сделать и то, и другое. Также выполните поиск по ключу и значению, просто разверните последнее if
Комментарии:
1. Это сделало свое дело. Большое вам спасибо за вашу помощь!
2. Отлично! Я рад, что это помогло. Можете ли вы одобрить это как правильный ответ?