如果在数组中存在两个相等的元素,则定义true或false

时间:2016-12-03 08:38:55

标签: php arrays

嗨,请原谅我的愚蠢问题,但是我在查找通过像下一个数组的函数中返回true或false的方法时遇到了麻烦

Array
(
    [0] => Array
        (
            [0] => 1389
        ),

    [1] => Array
        (
            [0] => 1389
        ),

    [2] => Array
        (
            [0] => 14568
        ),

    [3] => Array
        (
            [0] => 14568
        )

)

如果在数组中存在两个相等的元素,我应该能够返回truefalse。例如,在示例数组中,我应该能够返回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;

我做错了什么? 谢谢!

4 个答案:

答案 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

PHP sandbox

中查看