搜索键/值匹配的关联数组-PHP

搜索键/值匹配的关联数组-PHP,php,arrays,Php,Arrays,如何检查在$Pineers中找到的键/值对是否在关联数组$haystack中,如果是,将子数组附加到$haystack中 正在搜索和构建的数组 $haystack = Array ( [0] => Array ( [animal] => 'monkey' ) [1] => Array ( [animal]

如何检查在$Pineers中找到的键/值对是否在关联数组$haystack中,如果是,将子数组附加到$haystack中

正在搜索和构建的数组

$haystack = Array
    (
        [0] => Array
            (
                [animal] => 'monkey'
            )
        [1] => Array
            (
                [animal] => 'lion'
            )
        [2] => Array
            (
                [animal] => 'monkey'
            )
        )
    )
循环通过的数组

$needles =  = Array
    (
        [0] => Array
            (
                [animal] => 'monkey'
            )
        )
        [1] => Array
            (
                [animal] => 'ape'
            )
        )
        [3]...[99]
    )
工作选项---想要一种更有效的方法

foreach( $needles as $needle ){
    if(count($haystack)){
        $have_record = false;
        foreach( $haystack as $h ){
            if( $needle['animal'] === $h['animal'] ) {
                $have_record = true;
                break;
            }
        }
        if(!$have_record)
            array_push( $haystack, array( 'animal' => $needle['animal']) );
    } else {
      array_push( $haystack, array( 'animal' => $needle['animal']) );
    }
}
用这个

function find_key_value($array, $key, $val)
    {
        foreach ($array as $item)
        {
           if (is_array($item))
           {
               find_key_value($item, $key, $val);
           }

            if (isset($item[$key]) && $item[$key] == $val) return true;
        }

        return false;
    }

print_r(find_key_value($array, 'animal', 'monkey'));
试试这个

<?php
$haystack=array(0=>array('animal'=>'monkey'),array('animal'=>'loin'),array('animal'=>'monkey'));
$needles =array(0=>array('animal'=>'monkey'));
echo $r=isMatch($haystack,$needles);

function isMatch($haystack,$needles){
$haystack_val=array_column($haystack, 'animal');
$needles_val=array_column($needles, 'animal');
$result=array_diff($haystack_val,$needles_val);
if(count($result) > 0){
    return "false";
}else
 return "true";

}

?>


这是原始阵列吗?否则,您可以修改阵列以更好地使用。看起来你在这里有一个相同的密钥,我最终将通过一个数组($Piners)循环并构建一个新的数组($haystack)。。。因此,我必须对照新数组检查循环,以确保[animal]键是唯一的。希望这是有意义的。这意味着情况就像你正在从现有阵列构建新阵列,但没有任何重复。。是吗?@Suyog foreach需要检查[动物]钥匙。如果存在且价值相等,则继续;如果没有,请按子阵列中的键。。。以此类推。您的预期输出是什么?这将不起作用,因为$Nikes数组的键不一定与$haystack数组的键匹配。
<?php
$haystack=array(0=>array('animal'=>'monkey'),array('animal'=>'loin'),array('animal'=>'monkey'));
$needles =array(0=>array('animal'=>'monkey'));
echo $r=isMatch($haystack,$needles);

function isMatch($haystack,$needles){
$haystack_val=array_column($haystack, 'animal');
$needles_val=array_column($needles, 'animal');
$result=array_diff($haystack_val,$needles_val);
if(count($result) > 0){
    return "false";
}else
 return "true";

}

?>