Функция array_keys со значением поиска - это массив, возвращаемый пустым как результат в php (No Foreach) - PullRequest
1 голос
/ 24 апреля 2019
$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 , параметр поиска может быть смешанного типа , поэтому мы можем дать массив значений.

Когда я пытался это сделать, результат всегда выдается как пустой массив, который не является ожидаемым результатом.

Может кто-нибудь объяснить, как это сделать?

Ответы [ 3 ]

1 голос
/ 24 апреля 2019

Как вы можете видеть в исходном коде array_keys , ранее проводилось сравнение типов (в функции 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;
}
0 голосов
/ 24 апреля 2019

расшифруйте ваш массив json

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

затем используйте foreach для получения значений

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

}
0 голосов
/ 24 апреля 2019

Попробуйте 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...