查找一个数组中的数组值是否存在于另一个数组中,如果存在,则查找哪个键位置

时间:2014-01-22 21:40:22

标签: php arrays search

一直在查看array_intersect但不确定如何拉出找到的元素的关键位置/元素位置:

说:

$a = array('a','b');

$b = array('c','x','b','a','y','z');

我想在数组“$ b”中找到元素“a”和数组$ a中的“b”的位置

我打算在其他变量中标记或存储找到的最大元素值(即数组$ a中的“b”)。

在这个例子中,数组$ a中的'a'在数组$ b中的位置为“3”,而数组$ a中的'b'在数组$ b中的位置为'2',因此值为' a'大于'b'。然后我想将'a'的值存储在其他变量中。

欣赏它。

4 个答案:

答案 0 :(得分:4)

您可以继续使用array_intersect(),但与您最初的想象相反。它维护键,所以从数组开始,你想要分析的键。

<?php

$a = array('a','b');
$b = array('c','x','b','a','y','z');

// array(2) { [2]=> string(1) "b" [3]=> string(1) "a" }
$intersect = array_intersect($b, $a);

// a
echo end($intersect);

您可以从数组的输出中看到,您可以使用2和3的键。你需要做的就是获得最高的一个(我在这里使用了end())。

答案 1 :(得分:3)

您可以使用: Array Search

<?php
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');

$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);   // $key = 1;
?>

找到元素的关键字。

或者: in_array

<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Got Irix";
}
if (in_array("mac", $os)) {
    echo "Got mac";
}
?>

只是找出一个数组是否包含某个值。

如果您要在多维数组中执行此操作:

Search by Key Value in a multidimensional array

答案 2 :(得分:2)

<?php
$a = array('a','b');
$b = array('c','x','b','a','y','z');

// Search single
$ai = array_search('a', $b);
$bi = array_search('b', $b);

// Loop all
foreach($a as $k){
    $i = array_search($k, $b);
    if($i !== false){
        // $i contains key
    }
}

// Generate array with indexes
$c = array();
foreach($a as $k){
    $i = array_search($k, $b);
    if($i !== false){
        $c[$k] = $i;
    }
}

// Now c is like this array('a' => 3, 'b' => 2)

答案 3 :(得分:2)

我确信有很多解决方案,但您可以循环遍历数组,当值匹配时,将该键和值添加到新数组中:

$a = array('a','b');

$b = array('c','x','b','a','y','z');

$c = array();

for($i=0;$i<count($a);$i++)
{
    $a_el = $a[$i];

    for($y=0;$y<count($b);$y++)
    {
        $b_el = $b[$y];

        if($a_el == $b_el)
        {
            $c[$y] = $b_el;
        }       
    }   
}

var_dump($c);