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

时间:2019-04-24 09:20:54

标签: php arrays multidimensional-array

$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 的定义,搜索值参数可以为mixed type,因此我们可以给出值的数组。

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

有人可以解释如何做到这一点吗?

3 个答案:

答案 0 :(得分:1)

正如您在nearest neighbors中看到的那样,之前(在函数fast_is_identical_function中)存在类型比较-这就是为什么不支持数组的原因-核心代码无法破坏数组。

mix_value的意思是,您可以将array与array进行比较,或者将int与int进行比较...-但不能进行多重搜索。

但是,您可以这样做:

$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;
}

答案 1 :(得分:0)

尝试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;

答案 2 :(得分:0)

解码您的json数组

$full = (array) json_decode($this->input->post($full_json);

然后使用foreach获取值

 foreach($full['1stelement']['2ndelement']['elements'] as $key => $values){

}