嗨,请原谅我的愚蠢问题,但是我在查找通过像下一个数组的函数中返回true或false的方法时遇到了麻烦
Array
(
[0] => Array
(
[0] => 1389
),
[1] => Array
(
[0] => 1389
),
[2] => Array
(
[0] => 14568
),
[3] => Array
(
[0] => 14568
)
)
如果在数组中存在两个相等的元素,我应该能够返回true
或false
。例如,在示例数组中,我应该能够返回true
,因为1389和14568都存在。
相反,如果数组是这样的:
Array
(
[0] => Array
(
[0] => 1389
),
[1] => Array
(
[0] => 1389
),
)
输出应为false
我尝试将循环设置为此,但显然它不起作用!
$products_id_array []= array( $product_id); // my array
$count = count($products_id_array);
$products = $products_id_array[0][0];//set the first term of teh array
$i=0;
while ($i<$count) {
if ( $products_ids[$i][0] == $products)
{
$products = $products_ids[$i][0];
$mixed_products = false;
}
else
{
$mixed_products = true;
}
$i++;
}
return $mixed_products;
我做错了什么? 谢谢!
答案 0 :(得分:1)
您可以使用array_diff
&amp; array_intersect
函数:
$arr1 = [[1389], [1389], [14568], [14568]];
$arr2 = [[1389], [1389]];
$arr3 = [3, 3, 4, 4, 5 ];
function checkDoubleDuplicate(array $argArray) {
$iflag = 0;
$arrayUnique = array_unique($argArray, SORT_REGULAR);
foreach ($arrayUnique as $key => $value) {
$occuranceCount = count(array_intersect($argArray, array($value)));
if ($occuranceCount == 2)
$iflag++;
}
if (2 == $iflag)
return TRUE;
else
return FALSE;
}
echo checkDoubleDuplicate($arr3) ? 'yes' : 'no';
你唯一能做的就是将你的复杂/冗余数组(使用每个值的数组,从而使内存/代码变得复杂)转换为像$arr3
这样的简单形式。我建议使用 ToDo 解决方案
答案 1 :(得分:0)
您可以使用array_udiff功能。例如:
$array1 = array(
array(5),
array(10),
array(15),
array(77),
array(100)
);
$array2 = array(
array(10),
array(15)
);
function udiffMultiDem($a, $b)
{
return $a[0] - $b[0];
}
$diff = array_udiff($array1,$array2, 'udiffMultiDem'); //will contain elements that exist in $array1 and not in $array2
$cotainSameTwoValuesFlag = (count($array1) - count($diff)) == 2;
var_dump($cotainSameTwoValuesFlag);
答案 2 :(得分:0)
<?php
$array = [[1389], [1389], [14568], [14568]];
$o = [];
array_walk($array, function($v) use(&$o)
{
$o[$v[0]] = 0;
});
$result = array_keys($o);
$result = array_map(function($v){return [$v];}, $result);
var_dump($result);
和输出:
array(2) {
[0]=>
array(1) {
[0]=>
int(1389)
}
[1]=>
array(1) {
[0]=>
int(14568)
}
}
答案 3 :(得分:0)
这不是一个单行解决方案,而是完成你想要的工作。
$myArray = array(
'0'=>array(1389),
'1'=>array( 1389),
'2'=>array(14568),
'3'=>array(14568)
);
$count=0;
foreach($myArray as $key=>$value) {
if($key>=1 && ($key%2)==true){ // key must be >=1 and even number to get output when a pair is checked
if($myArray[$key]==$myArray[$key-1]){
$count++;
}
if($count>1){
echo "True";
} else {
echo "False";
}
}
}
输出为False True