检查关联数组是否包含某个值,并检索该值对应的键/在数组中的位置

9

很抱歉,如果我让你困惑了,因为我很难解释我想在这里做什么。 我自己也感到困惑。

我有一个数组,如下所示:

$foo = array(
    array('value' => 5680, 'text' => 'Red'), 
    array('value' => 7899, 'text' => 'Green'), 
    array('value' => 9968, 'text' => 'Blue'), 
    array('value' => 4038, 'text' => 'Yellow'),
)

我想检查数组是否包含值,例如7899,并获得与该值“Green”相关联的文本,以上示例。


2
foreach()怎么样?... - Phantom
7899没有与“yellow”链接。那么你需要做什么? - rack_nilesh
@rack_nilesh 对此表示歉意。已解决该问题。 - user1043646
@Phantom 我考虑过这个,但我已经嵌套在另外两个foreach循环中了,所以想知道是否有更好的方法。 - user1043646
3个回答

13

试试这样做

$foo = array(
    array('value' => 5680, 'text' => 'Red'), 
    array('value' => 7899, 'text' => 'Green'), 
    array('value' => 9968, 'text' => 'Blue'), 
    array('value' => 4038, 'text' => 'Yellow'),
);

$found = current(array_filter($foo, function($item) {
    return isset($item['value']) && 7899 == $item['value'];
}));

print_r($found);

哪些是输出

Array
(
    [value] => 7899
    [text] => Green
)

关键在于array_filter。如果搜索值7899不是静态的,则可以使用function($item) use($searchValue)将其带入闭包中。请注意,array_filter返回一个元素数组,这就是为什么我通过current传递它的原因。


2
附注:使用动态搜索值 `$found = current(array_filter($activityArray, function($item) use($jobID) { return isset($item['jobid']) && $jobID == $item['jobid']; })); print_r($found);` - Wasim Sayyed

4

对于PHP >= 5.5.0,使用array_column更加容易:

echo array_column($foo, 'text', 'value')[7899];

或者为了避免每次都使用array_column而实现可重复性:

$bar = array_column($foo, 'text', 'value');
echo isset($bar[7899]) ? $bar[7899] : 'NOT FOUND!';

0

根据您的需求,我猜测您想要这个:

function findTextByValueInArray($fooArray, $searchValue){
    foreach ($fooArray as $bar )
    {
        if ($bar['value'] == $searchValue) {
            return $bar['text'];
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接