У меня проблемы с 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');
Самый простой способ — просто просмотреть результаты, пока не найдете нужный 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;
}
}
Я бы использовал json decode, а затем проанализировал его, чтобы получить правильное значение, может потребоваться цикл while или for
Вот хороший источник:
http://php.net/manual/en/function.json-decode.php
Я верю, что это может работать, но я не проверял это
$json = json_decode($string);
echo $json->api_json[0]->api_name;
Вы могли бы поместить это в функцию:
$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);
Ты можешь использовать:
$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
)
)