我有2个数组我需要以相同的顺序进行精确比较,我需要检查类subA
和subB
中的每个数组是否包含先决条件中的数组。
我的先决条件数组
Array
(
[s1] => MAT
[s2] => ENG
[s3] => PHY
[s4] => CHE
[s5] => FRE
)
和我的班级数组
Array
(
[subA] => MAT
[subB] => ENG
)
Array
(
[subA] => ENG
[subB] =>
)
Array
(
[subA] => MAT
[subB] => PHY
)
Array
(
[subA] => CHE
[subB] =>
)
Array
(
[subA] => MAT
[subB] => FRE
)
我的代码
$prerequisite = array(
's1' => 'MAT',
's2' => 'ENG',
's3' => 'PHY',
's4' => 'CHE',
's5' => 'FRE'
);
$confirmed = TRUE;
$i = 0;
foreach($prerequisite as $p )
{
if( in_array( $prerequisite, $classes[$i] ) )
{
// The prerequisite has been met
}
else
{
// The prerequisite has not been met
$confirmed = FALSE;
}
$i++;
}
if($confirmed == TRUE) { //run insert query here }
预期输出
如果满足所有先决条件,我需要返回TRUE, 需要它来找到例如:
subA
或subB
的第一个数组与先决条件数组中的s1
值MAT
匹配subA
或subB
中的第二个数组与先决条件数组中的s2
值ENG
匹配subA
或subB
中的第三个数组与先决条件数组中的s3
值PHY
匹配subA
或subB
的第四个数组与先决条件数组中的s4
值CHE
匹配subA
或subB
的第五个数组与先决条件数组中的s5
值FRE
匹配问题
我总是得到FALSE
并且无法运行插入查询
答案 0 :(得分:1)
你没有使用$p
,你提供了一个数组作为in_array()的针参数:with
statement
如果用$p
替换in_array指针,您将在$classes[$i]
搜索单个值而不是整个数组。
你似乎也不需要整个街区,只需使用! (不)在条件而不是检查条件和使用else块。
if( ! in_array( $p, $classes[$i] ) )
{
$confirmed = false;
}
答案 1 :(得分:1)
这个问题为PHP函数array_map()
提供了一个漂亮的用例:
$prerequisite = array(
's1' => 'MAT',
's2' => 'ENG',
's3' => 'PHY',
's4' => 'CHE',
's5' => 'FRE'
);
$classes = array(
array(
'subA' => 'MAT',
'subB' => 'ENG',
),
array(
'subA' => 'ENG',
'subB' => NULL,
),
array(
'subA' => 'MAT',
'subB' => 'PHY',
),
array(
'subA' => 'CHEx', // <---- doesn't match the prerequisite
'subB' => NULL,
),
array(
'subA' => 'MAT',
'subB' => 'FRE',
),
);
// array_filter() removes the matching classes
$missing = array_filter(
array_map(
function(array $class, $pre, $key) {
// Return $key when the values of both 'subA' and 'subB'...
// ... are different than the expected prerequisite
return ($class['subA'] !== $pre && $class['subB'] !== $pre) ? $key : NULL;
},
$classes,
$prerequisite,
array_keys($prerequisite)
)
);
// $missing associates the keys of $classes (numbers) to the keys of $prerequisite
// ... for classes that do not match their prerequisite
print_r($missing);
输出结果为:
Array
(
[3] => s4
)
答案 2 :(得分:0)
这可能是以下内容的重复:Checking to see if one array's elements are in another array in PHP
您应该使用 array_intersect 来实现此方法......
我会回答,因为还有其他事情你还没有清除。
$prerequisite = array(
's1' => 'MAT',
's2' => 'ENG',
's3' => 'PHY',
's4' => 'CHE',
's5' => 'FRE'
);
$classes1 = array(
"subA" => "MAT",
"subB" => "ENG"
);
$classes2 = array(
"subA" => "ENG",
"subB" => ""
);
if(!empty(array_intersect($prerequisite, $classes1))) {
//run insert query here
}
你遗漏了一些东西:
$classes
作为数字数组而非关联数据。$p
正如您所看到的,我已经从您告诉我的查询中创建了数组。
您可以在here
上看到此问题