我正在处理自定义购物车变体代码,并希望检查所选产品选项的主数组中是否有所选选项数组。
例如,将以下内容视为我的主数组,其中c1,c2是选项类别(大小,颜色等),值是该类别中选项的ID。
$optionsarray = Array
(
[0] => Array
(
[c1] => 70
[c2] => 79
)
[1] => Array
(
[c1] => 71
[c2] => 79
)
[2] => Array
(
[c1] => 71
[c2] => 80
)
[3] => Array
(
[c1] => 70
[c2] => 62
)
[4] => Array
(
[c1] => 71
[c2] => 62
)
);
我希望能够检查是否存在不同的值
因此,如果我的$selected_array
要测试
$selected_array = Array
(
[c1] => 70
)
我想知道
[2] => Array
(
[c2] => 80
)
来自$optionsarray
的是唯一与[c2]不匹配的,所以我可以在前端禁用该选项。
最接近我的工作是做相反的事情并找到"允许"匹配使用以下函数(以下示例中的$the_selected_cat
是来自前端的1)
$filteredoptionsarray = array();
$fo = 0;
foreach ($optionsarray as $option) {
$fo ++;
$catvar = "";
$results = array_diff_assoc($option, $selected_array);
$catvar = 'c' . $the_selected_cat;
if (!$results[$catvar]) {
foreach ($results as $result => $value) {
$filteredoptionsarray[] = (array("cat" => $result, "id" => $value));
}
}
}
这给了我匹配[c1] =>的ID 70但是我真正需要的是一个不同的功能或另一个步骤来反过来并吐出不可用的id。在这个例子中[c2] => 80
我尝试使用array_intersect_assoc
的某些功能无济于事。
理论上,我试图尽可能保持动态,因此可能有1,2,3等选项类别。
非常感谢任何正确方向的推动。
< ===============编辑===============>
可能非常特定于我的应用程序但现在可以解决这个问题
$the_selected_term = 70;
$the_selected_cat = 1
//above two vars coming from the front-end
$allowed = array();
$disallowed = array();
foreach ( $optionsarray as $option => $value ) {
if( $value['c'.$the_selected_cat] == $the_selected_term ){
for ( $cc = 1; $cc <= $count_cats; $cc++ ) {
if($cc != $the_selected_cat){
$allowed[] = "c".$cc."-".$value['c'.$cc];
}
}
} else {
for ( $cc = 1; $cc <= $count_cats; $cc++ ) {
if($cc != $the_selected_cat){
$disallowed[] = "c".$cc."-".$value['c'.$cc];
}
}
}
}
$disabled = array();
$results=array_diff($disallowed,$allowed);
$results = array_unique($results);