$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,因此我们可以给出数组值。
当我尝试这个时,结果总是作为一个空数组给出,这不是预期的结果。
谁能解释如何实现这一目标?
你可以在array_keys source code中看到之前的类型比较(在函数fast_is_identical_function
中) - 这就是为什么数组不受支持 - 因为核心代码无法破坏数组。
mix_value
的意思是你可以将数组与数组或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;
}
尝试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;
解码你的json数组
$full = (array) json_decode($this->input->post($full_json);
然后使用foreach获取值
foreach($full['1stelement']['2ndelement']['elements'] as $key => $values){
}