我需要在两个数组之间找到共同的元素。我的代码是:
$sql="SELECT DISTINCT fk_paytbl_discounts_discountid as discountid from paytbl_discounts_students WHERE fk_vtiger_cf_601='".$categoryid."'";
$discountstudentinfo=$objdb->customQuery($sql,false);
$sql1="SELECT DISTINCT fk_paytbl_discounts_discountid as discountid from paytbl_discounts_variants WHERE fk_vtiger_products_productid='".$variantid."'";
$discountvariantinfo=$objdb->customQuery($sql1,false);
$commondiscount=array_intersect($discountvariantinfo,$discountstudentinfo);
第一个数组
Array
(
[0] => Array
(
[discountid] => 2
)
[1] => Array
(
[discountid] => 8
)
[2] => Array
(
[discountid] => 5
)
[3] => Array
(
[discountid] => 4
)
)
第二个数组
Array
(
[0] => Array
(
[discountid] => 1
)
[1] => Array
(
[discountid] => 5
)
)
公共数组
Array
(
[0] => Array
(
[discountid] => 1
)
[1] => Array
(
[discountid] => 5
)
)
Common数组应该只有5,但它的显示也是。
请帮我解决这个问题
由于
答案 0 :(得分:1)
http://php.net/array_intersect
注意:考虑两个要素 等于且仅当(字符串)$ elem1 ===(字符串)$ elem2。用文字表示:当字符串表示相同时。
因此,您遇到问题的原因是:例如:
(string) array('discountid' => 5) == (string) array('discountid' => 8)
如果您运行的是PHP 5.3,这是一个解决方案:
$comparisonFunction = function($elem1, $elem2) {
return $elem1['discountid'] == $elem2['discountid'];
}
$commondiscount = array_uintersect(
$discountvariantinfo,
$discountstudentinfo,
$comparisonFunction
);
在PHP 5.3之前,你可以使用uglier create_function()
而不是漂亮的闭包。如果你在一个方法中执行,很可能很容易使用一个新的私有方法作为回调。
如果你没有使用PHP 5.3并且你真的不想使用回调,你可以使用以下想法:
$uniqueDiscounts = array();
foreach ($discountvariantinfo as $dvi) {
$uniqueDiscounts[$dvi['discountid']] += 1;
}
foreach ($discountstudentinfo as $dsi) {
$uniqueDiscounts[$dsi['discountid']] += 1;
}
$commondiscount = array();
foreach ($uniqueDiscounts as $ud => $count) {
if ($count == 2) {
$commondiscount[] = array('discountid' => $ud);
}
}
当然,您会想要整理一下或添加注释来解释算法。