Удалить последний символ из строки, которая генерируется в цикле

Поверьте, я перепробовал все, что есть в переполнении стека!

Итак, я получил этот 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,

Основной проблемой с этим выводом является «,» в конце.
Я не могу удалить это!

Все перепробовал —
Это —
Удалить последний символ из строки

с субстратом, тримом, взорваться …
ВСЕ!

Это не работает!

1

Решение

Вот решение

$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>";
1

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

Версия, использующая 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>
2

Вы могли бы сделать что-то вроде этого

 $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>';
}

Это помешало бы написать последний символ ‘,’, сравнивая, является ли ваша текущая итерация концом цикла

0

Если вы знаете, что последний элемент всегда будет 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>';
}
0