#php
#php
Вопрос:
У меня есть массив курсов:
Array
(
[0] => BIOL-1108
[1] => BIOL-1308
[2] => BIOL-2401
[3] => BIOL-2402
)
И многомерный массив завершенных курсов, который выглядит следующим образом:
Array
(
[course] => Array
(
[0] => Array
(
[course] => BIOL-2401
[title] => BIOL-2401 - Human Anatomy amp; Physiology I
[grade] => A
)
[1] => Array
(
[course] => HIST-1301
[title] => HIST-1301 - History of the U.S. I
[grade] => B
)
[2] => Array
(
[course] => MATH-0303
[title] => MATH-0303 - Intermediate Algebra
[grade] => F
)
[3] => Array
(
[course] => BIOL-1108
[title] => BIOL-1108 - Life Science I Lab
[grade] => B
)
[4] => Array
(
[course] => BIOL-1308
[title] => BIOL-1308 - Life Science I
[grade] => C
)
)
)
Я хочу повторить только курс, название и оценку, если они существуют в первом массиве. Я думаю, что мне нужен цикл foreach, но я застрял.
Комментарии:
1. Просто для подтверждения: ваш ожидаемый результат здесь будет
2401
and1308
?2.
1108
также существует в обоих.3. да, эти три. Затем я проведу проверку массива course по сравнению с 7 другими массивами с аналогичными данными coursa (математика, изобразительное искусство и т. Д.)
Ответ №1:
Вы на правильном пути, поскольку вам нужно перебрать значения вашего многомерного массива, а затем посмотреть, есть ли курсы в вашем массиве курсов. Это можно сделать с помощью foreach в сочетании с функцией in_array .
<?php
$courses = array('BIOL-1108', 'BIOL-1308', 'BIOL-2401','BIOL-2402');
$completed_courses = array(
'course' => array(
array(
'course' => 'BIOL-2401',
'title' => 'BIOL-2401 - Human Anatomy amp; Physiology I',
'grade' => 'A'
),
array(
'course' => 'HIST-1301',
'title' => 'HIST-1301 - History of the U.S. I',
'grade' => 'B'
),
array
(
'course' => 'MATH-0303',
'title' => 'MATH-0303 - Intermediate Algebra',
'grade' => 'F'
),
array
(
'course' => 'BIOL-1108',
'title' => 'BIOL-1108 - Life Science I Lab',
'grade' => 'B'
),
array
(
'course' => 'BIOL-1308',
'title' => 'BIOL-1308 - Life Science I',
'grade' => 'C'
)
)
);
foreach( $completed_courses['course'] as $curr ){
if(in_array($curr['course'], $courses)) {
echo 'COURSE : ' . $curr['course'] . PHP_EOL;
echo 'TITLE : ' . $curr['title'] . PHP_EOL;
echo 'GRADE : ' . $curr['grade'] . PHP_EOL;
}
}
Комментарии:
1. Это тот, который работал лучше всего для меня, и его было проще всего адаптировать. Очень признателен!
2. Рад, что смог помочь
Ответ №2:
Вы, вероятно, ищете array_flip
функцию, чем это довольно просто.
<?php
$courses = [
'BIOL-1108',
'BIOL-1308'
];
$completed = [
'course' => [
[
'course' => 'BIOL-1108',
'title' => 'title',
'grade' => 'C'
],
[
'course' => 'BIOL-1308',
'title' => 'title',
'grade' => 'C'
],
[
'course' => 'BIOL-1408',
'title' => 'title',
'grade' => 'C'
]
]
];
$courses = array_flip($courses);
foreach ($completed['course'] as $row) {
if (!isset($courses[$row['course']])) {
echo $row['course'] . '<BR>'; // returns BIOL-1408 in my example
}
}
Комментарии:
1. Мне нужно, чтобы он извлек 2 из трех, а не BIOL-1408 в этом примере. будет ли isset вместо!isset правильным вместо
2. @trf: извините,
isset
выполняйте задание 🙂
Ответ №3:
Вы можете перебирать свой массив (предполагая имена переменных) и использовать in_array
, чтобы проверить, существует ли название курса.
foreach($user['course'] as $course):
if(in_array($course['title'], $completedCourses)):
printf('Title: %s, Grade: %s', $course['title'], $course['grade']);
endif;
endforeach;
Комментарии:
1. Ну, видимо, у меня есть 3 ответа, которые работают. Спасибо всем троим из вас. Я принял первый ответ, хотя все три технически выполняют эту работу. но все проголосовали. Я с нетерпением жду любых комментариев, которые поступят, чтобы я мог узнать немного больше.