#php #json
#php #json
Вопрос:
У меня есть файл json, хранящийся на сервере, и он выглядит следующим образом:
{
"support_link":"#",
"support_link_2":"#",
"packs":[
{
"identifier":1,
"viewCount":0,
"downloadCount":0
},
{
"identifier":2,
"viewCount":0,
"downloadCount":0
}
]
}
Используя PHP, я хочу обновить количество просмотров и загрузок некоторых массивов внутри пакетов.
Но дело в том, что данные поступают через POST
метод на сервер, который содержит другой json с информацией. из какого идентификатора обновлять и какой параметр обновлять, и я не могу обновить существующий файл и сохранить его обратно.
Полученный формат Json:
{
"impressions": [
{
"identifier": "1",
"impressionCount": 2
},
{
"identifier": "100",
"impressionCount": 2
},
{
"identifier": "1000",
"impressionCount": 2000
}
],
"downloads": [
{
"identifier": "1",
"downloadCount": 10
}
]
}
Что я пытался сделать до сих пор:
$json = file_get_contents('php://input');
if ($json != '') {
$properJsonFormatted = json_decode($json, true);
$impressions = $properJsonFormatted['impressions'];
$downloads = $properJsonFormatted['downloads'];
$testConfig =
$json = file_get_contents('php://input');
if ($json != '') {
$properJsonFormatted = json_decode($json, true);
$impressions = $properJsonFormatted['impressions'];
$downloads = $properJsonFormatted['downloads'];
$testConfig = json_decode(file_get_contents("test_config.json"),true);
$packs = $testConfig['packs'];
foreach ($packs as amp;$pack) {
$packIdentifier = $pack['identifier'];
foreach ($impressions as $impression) {
$impressionIdentifier = $impression['identifier'];
if ($packIdentifier == $impressionIdentifier) {
$pack['viewCount'] = $impression['impressionCount'];
$newCount = $pack['viewCount'];
print("Id: $packIdentifier, ViewCount: $newCountn");
}
}
}
put_file_contents("test_config.json" , $testConfig);
// print_r($testConfig);
// Save back the updated test_config.json
}
}
Комментарии:
1. Ну, для каждого
$pack
вы просматриваете$impressions
поиск соответствияidentifier
Ответ №1:
Обновить
Похоже, вы неправильно истолковали вопрос. Реальная проблема, похоже, намного проще.
Измените это:
put_file_contents("test_config.json" , $testConfig);
Для этого:
file_put_contents('test_config.json', json_encode($testConfig));
Также измените это:
$packs = $testConfig['packs'];
Для этого:
$packs = amp;$testConfig['packs'];
Похоже, вы забыли назначить это по ссылке, хотя вы правильно сделали это в foreach .
Комментарии:
1. Спасибо за это, но я не имею в виду добавлять объекты, полученные из входных данных, я хочу получить массив показов -> получить идентификатор, если они оба совпадают -> увеличить значение
viewCount
путем добавленияimpressionCount
, то же самое касается количества загрузок, однако я могу это сделать, но в финалеtestConfig
, когдасохранен, не содержит обновленных данных2. Я вижу. Ваш вопрос и код не были ясны в этом (
$pack['viewCount'] = 1900;
??). Из моего ответа нетрудно перейти от «перезаписать» к «добавить». Дайте мне знать, если вам нужна помощь в этом.3. Извините за это, это был просто заполнитель, я обновил то, как я пытался с кодом, значение, похоже, теперь обновляется, но новые значения не сохраняются в файл обратно.
4. Хорошее эмпирическое правило — всегда публиковать фактический код, с которым вы боретесь ;). Но все в порядке, я думаю, что все равно смогу вам помочь. Смотрите Мой пересмотренный ответ для решения того, что, по моему мнению, происходило.
5. Еще раз спасибо, я вижу, что test_config действительно сохраняется в файле: D, могу сказать это наверняка, потому что отступ исчезает, но изменения не отражаются в файле, значения по-прежнему равны 0.