具有搜索值的array_keys函数是一个数组,在php中结果为空(无Foreach)

$full_json ='{

"1stelement": {

"2ndelement": {

  "elements": [

    {

      "test1": 383,

      "test2": 100

    },

    {

      "test1": 48,

      "test2": 5

    },

    {

      "test1": 383,

      "test2": 100

    },

    {

      "test1": 48,

      "test2": 6

    },

    {

      "test1": 383,

      "test2": 100

    },

    {

      "test1": 48,

      "test2": 7

    },

    {

      "test1": 383,

      "test2": 100

    },

    {

      "test1": 48,

      "test2": 8

    },

    {

      "test1": 383,

      "test2": 100

    },

    {

      "test1": 48,

      "test2": 9

    },

    {

      "test1": 383,

      "test2": 100

    },

    {

      "test1": 48,

      "test2": 10

    }

  ]

}

}

}';


$full = json_decode($full_json,true);

$test2range = array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);

$values=array_keys(array_column($full['1stelement']['2ndelement']['elements'], 'test2'),$test2range ,true);

// $values=array_keys(array_column($full['1stelement']['2ndelement']['elements'], 'test2'),5 ,true); // returns result

var_dump($values);

exit;

我想获取array_keys返回值以进一步处理。

没有array_keys函数,我们可以使用不建议使用foreach循环获取值。

根据array_keys的定义,搜索值参数可以是混合类型,因此我们可以给出值的数组。

当我尝试这样做时,结果总是以空数组形式给出,这不是预期的结果。

谁能解释如何做到这一点?


哔哔one
浏览 201回答 3
3回答

芜湖不芜

正如您在array_keys源代码中看到的那样,在函数之前,在类型比较中(在函数中fast_is_identical_function)-这就是为什么不支持数组的原因-因为核心代码无法破坏数组。这mix_value意味着您可以将array与array进行比较,或者将int与int进行比较...-而不是search的multi选项。但是,您可以这样做:$values = array_keys(array_filter($full['1stelement']['2ndelement']['elements'], function ($e) use ($test2range) {return in_array($e["test2"], $test2range);}));或者,您可以自己实现它:function array_keys_multi_search($arr, $searchValues, $strict) {    $res = array();    foreach($searchValues as $v)        $res = array_merge($res, array_keys($arr, $v, $strict));    return $res;}

杨魅力

解码您的json数组$full = (array) json_decode($this->input->post($full_json);然后使用foreach获取值 foreach($full['1stelement']['2ndelement']['elements'] as $key => $values){  }

慕码人8056858

尝试array_intersect()检查匹配的键。$full = json_decode($full_json,true);$test2range = array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);$values= array_column($full['1stelement']['2ndelement']['elements'], 'test2');$result=array_intersect($test2range,$values);var_dump($result);exit;
打开App,查看更多内容
随时随地看视频慕课网APP