为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
哔哔one 2021-04-27 21:34:02
$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 resultvar_dump($values);exit;我想获取array_keys返回值以进一步处理。没有array_keys函数,我们可以使用不建议使用foreach循环获取值。根据array_keys的定义,搜索值参数可以是混合类型,因此我们可以给出值的数组。当我尝试这样做时,结果总是以空数组形式给出,这不是预期的结果。谁能解释如何做到这一点?
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

正如您在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;

}


查看完整回答
反对 回复 2021-05-14
?
杨魅力

TA贡献1811条经验 获得超6个赞

解码您的json数组

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

然后使用foreach获取值

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


查看完整回答
反对 回复 2021-05-14
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-05-14
  • 3 回答
  • 0 关注
  • 200 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信