检查PHP中的数字是否在解码的JSON字符串数组中

时间:2014-05-19 15:21:14

标签: php arrays json

我已经解码了我的JSON字符串,现在我想在PHP中使用in_array()函数来检查数组中是否存在其中一个ID号(确切地说是数字5)。

阵列:

Array ( [0] => Array ( [id] => 5 ) [1] => Array ( [id] => 4 [children] => Array ( [0] => Array ( [id] => 2 [children] => Array ( [0] => Array ( [id] => 7 [children] => Array ( [0] => Array ( [id] => 10 ) ) ) ) ) ) ) [2] => Array ( [id] => 3 [children] => Array ( [0] => Array ( [id] => 6 [children] => Array ( [0] => Array ( [id] => 8 ) ) ) [1] => Array ( [id] => 9 ) ) ) )

我的代码(失败了):

if (in_array(5, $array)) {
    echo "i'm in the array!";
}

if (in_array('5', $array)) {
    echo "i'm in the array!";
}

这似乎是一个简单的问题 - 我是盲目的......

3 个答案:

答案 0 :(得分:2)

(未经测试)(甚至可以搜索子数组(来自php))

if(recursive_array_search("5",$array))
{
echo 'found';
}else
{
echo 'not found';
}

function recursive_array_search($needle,$haystack) {
    foreach($haystack as $key=>$value) {
        $current_key=$key;
        if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
            return $current_key;
        }
    }
    return false;
}

答案 1 :(得分:1)

数组中有多个维度。如果你有PHP> = 5.5,你需要循环检查id或使用array_column

$ids = array_column($array, 'id');
if(in_array(5, $ids)) {
    echo "i'm in the array!";
}

或者:

foreach($array as $value) {
    if($value['id'] == 5) {
        echo "i'm in the array!";
        break;
    }
}

答案 2 :(得分:0)

您要查找的值不是5,而array("id" => 5)是否有助于您理解?

我不确定in_array(array("id" => 5), $array)是否有效,但如果有效,那就太棒了!

否则,使用典型的查找模式算法来匹配它:循环查找匹配的值,如果可以,则提前返回。


您还可以考虑重新索引输入数组,以便更容易找到id值。