Как использовать строку в функции array_intersect_key в PHP?

#php #arrays #string

#php #массивы #строка

Вопрос:

В настоящее время я работаю над сравнением ключей из нескольких массивов, и количество массивов может варьироваться, но мне бы хотелось, чтобы это было полностью автоматическим.

Я пытался преобразовать нужный мне массив в строку в цикле for, а затем использовать строку в array_intersect_key, но я не могу заставить это работать.

Мой входной код (не уверен, что там делает оператор «if», но эта часть точно работает)

 $arr = array();
foreach($_POST as $key=>$value){
    if($key == "load" || strpos("id",$key) !== false){
        continue;
    }
    $data = file_get_contents('http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=C5DF6B05C9770667C1E3138EE69A8301amp;steamid='.$value.'amp;format=json');
    $json = json_decode($data, TRUE);
    array_push($arr,$json);
}
  

И моя проблема где-то здесь

 $r = "";
for($n=0;count($arr) != $n;$n  ){
     $r.= '$arr['.$n.']["response"]["games"],';
}
$r = substr($r, 0, -1);
$r = array_intersect_key($r);
print_r($r);
  

Я бы хотел, чтобы это было что-то вроде

 $r = array_intersect_key($arr[0]["response"]["games"],$arr[1]["response"]["games"],$arr[2]["response"]["games"]);
  

с возможностью быть бесконечным (вот почему цикл существует), но вместо этого я получаю ошибку
«Предупреждение: array_intersect_key(): требуется как минимум 2 параметра, 1 из которых указан в URL в строке 39″.

Если кто-нибудь знает, как я могу это сделать, возможно, другим способом, я был бы очень признателен за помощь

Я бы хотел, чтобы конечным результатом был массив со всеми соответствующими ключами.

Комментарии:

1. Я обновил код своими входными данными, но поскольку он скопирован только из моего источника (я немного занят), конкретного ввода нет, но пример можно найти на api.steampowered.com/IPlayerService/GetOwnedGames/v0001 /…

Ответ №1:

Вы должны сделать вот так.

 $r = "";
for($n=0;count($arr) != $n;$n  ){
   $r[$n]['response']['games'] = $arr[$n];
   $allowed[] = $n;
}
$r1 = array_intersect_key($r, array_flip($allowed)); 
echo '<pre>';
print_r($r1);
echo '</pre>';
  

Комментарии:

1. Ehm… Эта «предварительная» вещь была довольно умной, спасибо. Но что ж, остальное не совсем работает, теперь оно просто печатает (на данный момент) 3 массива, которые у меня есть, как массив 0-2, но я бы хотел, чтобы он стал единым массивом, содержащим соответствующие ключи