найти данные JSON с переполнением стека

У меня проблемы с php & JSON

сначала показать мой файл JSON

{
"api_json": [
{
"api_id": 1,
"api_no": 36,
"api_name": "name",
"api_val": [
133,
424
]
},
{
"api_id": 2,
"api_no": 21,
"api_name": "name2",
"api_val": [
213,
924
]
}
]
}

и я хочу использовать "api_name" = "name2" найти "api_no" = 21

Я пытался прочитать файл и $json['api_json'][0]['api_name']

$file = "../api.json";
$json = json_decode(file_get_contents($file), true);
echo $json['api_json'][0]['api_name'];

но он не может найти api_no по api_name

есть что предложить?

================================

Вот окончательный

Я успешно получаю данные, хотя api_name, но если у меня есть до 100 раз, чтобы сделать это

мой сервер не может справиться с этим 🙁

Так что я использую функцию и позволяю JSON декодировать вне функции

Наконец то работает !!

Спасибо всем за помощь !!

Вот мой код

$json = json_decode(file_get_contents("upload/server/ships.json"));
function shipdata($ship,$slot,$json){
foreach($json->api_mst_ship as $ship_data) {
if ($ship_data->api_name === $ship) {
switch ($slot){
case "id":
return $ship_data->api_id;
break;

case "filename":
foreach($json->api_mst_shipgraph as $ship_image) {
if ($ship_image->api_id === $ship_data->api_id) {
return $ship_image->api_filename;
}
}
break;
}
}
}
};

echo shipdata('Bismarck','id');
echo shipdata('Bismarck','filename');

-1

Решение

Самый простой способ — просто просмотреть результаты, пока не найдете нужный api_name значение, а затем выведите api_id значение в текущем наборе. например.,

$data = json_decode($json);
foreach($data->api_json as $row) {
if ($row->api_name === 'name2') {
echo 'API Name "name2" found in api_id ', $row->api_id;
}
}
0

Другие решения

Я бы использовал json decode, а затем проанализировал его, чтобы получить правильное значение, может потребоваться цикл while или for

Вот хороший источник:

http://php.net/manual/en/function.json-decode.php

Я верю, что это может работать, но я не проверял это

$json = json_decode($string);
echo $json->api_json[0]->api_name;
1

Вы могли бы поместить это в функцию:

$json = json_decode($json, true);

$name = 'name';

function find_id_by_name($name, $api_array) {
foreach($api_array['api_json'] as $key => $array) {
if($array['api_name'] == $name) {
return $array['api_no'];
}
}
}

echo find_id_by_name($name, $json);
0

Ты можешь использовать:

$result = $json['api_json'][1];

Если вы получите доступ к: $result['api_no'], это даст вам 21

Переменная $ result будет иметь следующие значения:

Array
(
[api_id] => 2
[api_no] => 21
[api_name] => name2
[api_val] => Array
(
[0] => 213
[1] => 924
)
)
0
По вопросам рекламы [email protected]