我正在编写一个程序,我正在使用多维数组。该概念将输入主题名称,并将显示该学生正在学习该主题的索引。
$var= [ 'Abdullah'=>['full_name'=>'Abdullah_Faraz',
'Subject'=>['English','Urdu','Maths']],
'Hamid'=>['full_name'=>'Hamid_Amjad',
'Subject'=>['PHP','Urdu','C++']],
'Abid'=>['full_name'=>'Abid_Ali',
'Subject'=>['OOP','OS','Calculus']],
'Aqeel'=>['full_name'=>'Aqeel_Bhutta',
'Subject'=>['Economics','Statistics','Big_Data']]
];
foreach ($var as $key => $value) {
foreach ($value as $key1 => $value1) {
foreach ($value1 as $value2) {
if($value2='Urdu'){
echo $key;
}
}
}
输出 阿卜杜拉 哈密
但现在我想显示那些不研究乌尔都语的人的指数应该是
Abid
Aqeel
但我不知道如何实现这一目标。
答案 0 :(得分:1)
您可以使用此
foreach ($var as $key => $value) {
$lang = $value['Subject'][1];
if($lang != 'Urdu'){
echo $key.'<br>';
}
}
答案 1 :(得分:0)
用正常的for循环覆盖数组长度替换内部的两个 foreach 循环。
<?php
for ($x = 0; $x < dim-Length; $x++) {
echo "The number is: $x <br>";
}
?>
答案 2 :(得分:0)
试试这个
foreach ($var as $key => $value) {
$flag = 0;
foreach ($value as $key1 => $value1) {
foreach ($value1 as $value2) {
if($value2=='Urdu'){
$flag =1;
echo $value;
}
}
if($flag == 0){
echo $key
}
}
答案 3 :(得分:0)
请参阅以下代码:
//study 'Urdu'
foreach($var as $nickname => $data){
if (in_array('Urdu', $data['Subject']))
echo $nickname . "<br>";
}
//not study 'Urdu'
foreach($var as $nickname => $data){
if (!in_array('Urdu', $data['Subject']))
echo $nickname . "<br>";
}
答案 4 :(得分:0)
使用functional programming可以更简单地完成此类任务。基本上,您需要通过某些谓词来过滤学生数组(例如,他们学习或不学习的科目)。我们可以为此写higher-order function。它将使用array_filter
:
function filterStudensBySubject($students, callable $subjectCriteria = null)
{
if (is_null($subjectCriteria)) {
$subjectCriteria = function ($subject) {
return true;
};
}
return array_filter($students, function ($student) use ($subjectCriteria) {
if (!isset($student['Subject'])) {
return false;
}
return $subjectCriteria($student);
});
}
然后我们可以写一些标准来提供这个功能:
$subjects = ['Urdu'];
$studySubjects = function ($student) use ($subjects) {
return !empty(array_intersect($student['Subject'], $subjects));
};
$doesNotStudySubjects = function ($student) use ($subjects) {
return empty(array_intersect($student['Subject'], $subjects));
};
我们使用array_intersect
来获取两个数组中存在的元素数组。
最后,我们可以让学生学习科目而不是:
$studentsWhoStudySubjects = filterStudensBySubject($var, $studySubjects);
$studentsWhoDoNotStudySubjects = filterStudensBySubject($var, $doesNotStudySubjects);
这是working demo。
此方法允许您使用与主题相关的任何标准相同的功能(仅研究两个主题,研究不超过三个主题等),而无需重写循环逻辑。
增加:
你问的是显示键:
$echoKey = function ($key) {
echo $key, PHP_EOL;
};
$keys = array_keys($studentsWhoStudySubjects);
array_walk($keys, $echoKey);
echo PHP_EOL;
$keys = array_keys($studentsWhoDoNotStudySubjects);
array_walk($keys, $echoKey);
对于这样简单的任务,这可能看起来像很多代码。但是这种方法可以帮助您学习编写解耦的可重用代码。正如我所提到的,我们可以使用我们的filterStudensBySubject
函数来过滤学生的任何条件(关于主题),而无需重写函数本身。
答案 5 :(得分:0)
如果我们要检查多个主题,我的贡献
$arr= array('English','Urdu','Big_Data');
//study 'Urdu'
foreach ($var as $key => $data) {
if (array_intersect($arr, $data['Subject'])) {
echo $key . "<br>";
}
}
这会将$ arr与所有主题进行比较并返回索引。