У меня есть JSON, как показано ниже, в котором я хочу вычислить через php, сколько значений присутствует внутри posts_id_en
. В настоящее время это 7, как показано ниже:
{
"posts_id_en": "149968, 149939, 149883, 149877, 149876, 149847, 154303",
"posts_id_fr": "149974,149953,149926, 149920, 149901",
"episode_status": "3"
}
В php-коде при выполнении echo $data->{"posts_id_en"};
он отображает значения, как показано ниже:
149968, 149939, 149883, 149877, 149876, 149847, 154303
Постановка задачи:
Мне интересно, какой php-код мне нужно использовать, чтобы мы могли вычислить количество значений, введенных внутри posts_id_en
. В этот момент вводится 7, как показано выше.
<?php
$json = '{
"posts_id_en": "149968, 149939, 149883, 149877, 149876, 149847, 154303",
"posts_id_fr": "149974,149953,149926, 149920, 149901",
"episode_status": "3"
}';
$decoded = json_decode($json, true);
$post_id = $decoded['posts_id_en'];
$resultList = [];
foreach($decoded as $key => $entry) {
$everyNumberAsArray = explode(',', $entry);
$count = count($everyNumberAsArray);
$resultList[$key] = $count;
}
var_export($resultList);
дает вывод:
array (
'posts_id_en' => 7,
'posts_id_fr' => 5,
'episode_status' => 1,
)
чтобы получить определенные значения, вы используете их следующим образом:
echo $resultList['posts_id_en'] . '<br>' . PHP_EOL;
что дает вам:
7
избили меня, чтобы опубликовать, пока я работал над ответом: P
@Jimmix Я обновил свой вопрос. В моем вопросе была небольшая ошибка.
@ Ало, в прошлый раз я был недостаточно осторожен, поэтому ты сделал это :P
Элементы, которые вы пытаетесь подсчитать, находятся в одной строке. Во-первых, вы должны разбить строку на элементы, затем вы можете их посчитать.
Возьмите json и превратите его в массив php
$jsonData = '{
"posts_id_en": "149968, 149939, 149883, 149877, 149876, 149847, 154303",
"posts_id_fr": "149974,149953,149926, 149920, 149901",
"episode_status": "3"
}';
$data = json_decode($jsonData, true);
затем разделите строку разделителем ","
$items = explode(", ", $data['posts_id_en']);
затем посчитайте
echo count($items);
В моем вопросе была небольшая ошибка. Я немного изменил свой вопрос.
Я обновил свой ответ на ваш новый json, но это не имеет значения.
У меня есть еще один вопрос. Это не похоже. Мне интересно, можете ли вы взглянуть.
Одним из простых способов было бы сначала json_decode
, затем проверить числа в нашем желаемом атрибуте и подсчитать совпадения:
$str = '{
"posts_id_en": "149968, 149939, 149883, 149877, 149876, 149847, 154303",
"posts_id_fr": "149974,149953,149926, 149920, 149901",
"episode_status": "3"
}';
$str_array = json_decode($str, true);
preg_match_all('/(\d+)/s', $str_array["posts_id_en"], $matches);
echo sizeof($matches[0]);
7
Только регулярное выражение:
$cnt = preg_match_all('/(?:\G(?!^)|"posts_id_en":\s*")[^",]+,?/', $str);
, но я бы тоже предпочелjson_decode
:p