在多维数组中搜索并获取索引

时间:2015-04-09 20:16:37

标签: php arrays search multidimensional-array

我有一个这样的数组:

printr_($photos);
======

Array
(
    [0] => Array
        (
            [path] => site:photos/photo-1.jpg
            [data] => Array
                (
                    [PhotoTitle] => Mega title
                    [PhotoDate] => 2015
                    [FlickrURL] => xxx
                    [Portrait] => 
                    [slug] => mega-title
                )

        )

    [1] => Array
        (
            [path] => site:photos/photo-2.jpg
            [data] => Array
                (
                    [PhotoTitle] => Photo title
                    [PhotoDate] => 2001
                    [FlickrURL] => xxx
                    [Portrait] => 
                    [slug] => photo-title
                )

        )

...

我想从字符串中获取数组索引(这是我浏览器当前URL中的slug) 尝试了解决方案,但我收到了一个错误(第95行的未定义索引:数据[...])

/*
** Search in array
*/
function arraySearch($array, $field, $search){
    foreach($array as $key => $value){
        if ($value[$field] === $search)
            return $key;
    }
    return false;
}

// Line 95
$photo_index = $photos[arraySearch($photos["data"], "slug", "mega-title")];

2 个答案:

答案 0 :(得分:4)

这应该适用于PHP> = 5.5:

$key = array_search('mega-title', array_column(array_column($photos, 'data'), $slug));
$photo_index = $photos[$key];

答案 1 :(得分:0)

$photos变量没有密钥'数据',至少不是打印输出。它有密钥1, 2, 3等。因此$photos["data"]根本不存在。

关于搜索,我不是100%确定你想要做什么,但我想你想得到$field data中的$search等于{{ 1}},这样就是

/*
** Search in array
*/

function arraySearch($array, $field, $search){
    foreach($array as $key => $value){
        if ($value["data"][$field] === $search)
            return $key;
    }
    return false;
}

你会用它

$photo_index = $photos[arraySearch($photos, "slug", "mega-title")];