x和y键值对必须匹配,在数组中查找

时间:2015-04-20 15:56:43

标签: php arrays

array (size=9)
 0 => 
  array (size=2)
   'x' => int 1
   'y' => int 4
  1 => 
 array (size=2)
  'x' => int 1
  'y' => int 5
  2 => 
 array (size=2)
  'x' => int 1
  'y' => int 6
  3 => 
 array (size=2)
  'x' => int 1
  'y' => int 7
 4 => 
array (size=2)
  'x' => int 1
  'y' => int 8
 5 => 
 array (size=2)
  'x' => int 4
  'y' => int 9
 6 => 
array (size=2)
  'x' => int 5
  'y' => int 9
 7 => 
array (size=2)
  'x' => int 6
  'y' => int 9
 8 => 
 array (size=2)
  'x' => int 7
  'y' => int 9

以上是x和y坐标的数组,其中我绘制了战舰,我想搜索数组并在x,y发送时匹配x,y对数组返回true。我可以这样做,如果我自己选择x,或者自己选择y,但是无法搜索x和y。

function searcharray($value, $key, $array) {
    foreach ($array as $k => $val) {
        //echo $val[$key];
        if ($val[$key] == $value) {
            return TRUE;
            //$val[$key];
        }
    }
    return null;
 }

$array;
// both these must match    

$key='y';
$value=9;
$key2='x';
Varlue2='5';


$result = searcharray($value,$key,$array);

echo $result;

3 个答案:

答案 0 :(得分:1)

您可以计算2个数组的交集。如果他们有共同元素,则结果为true,否则为false。但是,因为您要比较多维数组,所以需要使用自定义函数进行比较,因此应使用array_uintersect()计算交集:

$haystack = [['x'=>'1','y'=>'1'],['x'=>'2','y'=>'1']];
$search = [['x'=>'1','y'=>'1']]; // NOTE: this must be a multidimensional array

$result = (bool)array_uintersect($haystack, $search, function($a, $b) {
    return strcasecmp($a['x'].$a['y'], $b['x'].$b['y']);
});

TEST

答案 1 :(得分:0)

function isArrayEntrySet($array, $x, $y) {
    return (boolean) count(
        array_filter(
            $myArray,
            function ($value) use ($x $y) {
                return $value['x'] == $x && $value['y'] == $y;
            }
        )
    ) > 0;
}

$x = 9;
$y = 5;
if (isArrayEntrySet($array, $x, $y)) {
    echo 'BANG!!!';
}

答案 2 :(得分:-1)

有几种方法可以达到你想要的效果,这里有一个很小的功能可以帮助你做到这一点:

function identical_values( $arrayA , $arrayB ) {
    sort( $arrayA );
    sort( $arrayB );
    return $arrayA === $arrayB;
} 

基本上我们首先对两个数组进行排序,然后比较它们是否相等===
等数组将返回TRUE,而不同的返回FALSE


示例:

$array1 = array("x" => "green", "red", "blue", "red");
$array2 = array("x" => "green", "red", "blue", "red");

if(identical_values( $array1 , $array2 )){
echo "arrays are equal";
}

DEMO