Поверьте, я перепробовал все, что есть в переполнении стека!
Итак, я получил этот JSON —
$j={
"itempicture": [
{
"status": "3"},
{
"ItemCode": "001",
"ItemImage": "image1",
"ItemCategory": "shirt",
"ShowOnPOS": "Yes",
"LastModifiedOn": "2018-06-02 11:53:57"},
{
"ItemCode": "002",
"ItemImage": "image2",
"ItemCategory": "shirt",
"ShowOnPOS": "Yes",
"LastModifiedOn": "2018-06-02 11:53:57"}
]
}
и я получаю к нему доступ таким образом —
$jo = json_decode($j);
for($i = 1; $i < count($jo->itempicture); $i++) {
foreach($jo->itempicture[$i] as $prop=>$val) {
echo $val.",";
}
echo '<br>';
}
и я получаю этот вывод —
001,image1,shirt,Yes,2018-06-02 11:53:57,
002,image2,shirt,Yes,2018-06-02 11:53:57,
Основной проблемой с этим выводом является «,» в конце.
Я не могу удалить это!
Все перепробовал —
Это —
Удалить последний символ из строки
с субстратом, тримом, взорваться …
ВСЕ!
Это не работает!
Вот решение
$j='{"itempicture":[
{
"status":"3"},
{
"ItemCode":"001",
"ItemImage":"image1",
"ItemCategory":"shirt",
"ShowOnPOS":"Yes",
"LastModifiedOn":"2018-06-02 11:53:57"},
{
"ItemCode":"002",
"ItemImage":"image2",
"ItemCategory":"shirt",
"ShowOnPOS":"Yes",
"LastModifiedOn":"2018-06-02 11:53:57"}
]
}';
$jo=json_decode($j);
$edata = '';
for($i=1;$i<count($jo->itempicture);$i++){
$data = '';
foreach($jo->itempicture[$i] as $prop=>$val){
$data .= $val.",";
}
$edata .= rtrim($data, ",");
$edata .='<br/>';
}
echo "<pre>";
print_r($edata);
echo "</pre>";
Версия, использующая implode()
это означает, что вы должны преобразовать из JSON в массивы (по умолчанию это преобразование в объекты, поэтому добавьте true в качестве второго параметра в json_decode()
).
$j='{"itempicture":[
{
"status":"3"},
{
"ItemCode":"001",
"ItemImage":"image1",
"ItemCategory":"shirt",
"ShowOnPOS":"Yes",
"LastModifiedOn":"2018-06-02 11:53:57"},
{
"ItemCode":"002",
"ItemImage":"image2",
"ItemCategory":"shirt",
"ShowOnPOS":"Yes",
"LastModifiedOn":"2018-06-02 11:53:57"}
]
}';
$jo=json_decode($j, true);
array_shift($jo['itempicture']);
$edata = '';
foreach ( $jo['itempicture'] as $item) {
$edata .= implode(",", $item).'<br/>';
}
echo "<pre>";
print_r($edata);
echo "</pre>";
Распечатывает …
<pre>001,image1,shirt,Yes,2018-06-02 11:53:57<br/>
002,image2,shirt,Yes,2018-06-02 11:53:57<br/></pre>
Вы могли бы сделать что-то вроде этого
$jo=json_decode($j);
for($i=1;$i<count($jo->itempicture);$i++){
foreach($jo->itempicture[$i] as $prop=>$val){
if ($value === end($jo->itempicture[$i])) {
echo $val;
}
else {
echo $val.",";
}
}
echo '<br>';
}
Это помешало бы написать последний символ ‘,’, сравнивая, является ли ваша текущая итерация концом цикла
Если вы знаете, что последний элемент всегда будет LastModifiedOn
$jo=json_decode($j);
for($i=1;$i<count($jo->itempicture);$i++){
foreach($jo->itempicture[$i] as $prop=>$val){
if($prop == "LastModifiedOn")
echo $val;
else
echo $val.",";
}
echo '<br>';
}