Я храню некоторые данные в столбце "specialties" для MySQL db следующим образом:
,,specialty1,,,,specialty2,,,,specialty3,
Во-первых, я беру эти данные и превращаю их в массив:
$specialties = $location['specialties'];
$specialties_array = sw::shared()->users->unserializeArray($specialties);
foreach ($specialties_array as $specialty) {
$specialty = str_replace(',', '', $specialty);
echo $specialty . ", ";
}
Функция unSerializeArray:
public function unserializeArray($string) {
$array = explode(",,",$string);
unset($array[0]);
$array = array_values($array);
return $array;
}
Моя проблема с вышеприведенной функцией заключается в том, что некоторые из значений массива по-прежнему имеют одну запятую, прикрепленную к ним после выполнения этой функции.
Поэтому я использую str_replace для удаления запятых, чтобы обеспечить выделение значения специальности. После разделения значения специальности я снова добавляю одну запятую к каждой специальности для вывода.
В идеале я хотел бы показать специальности без запятой после последней специальности:
specialty1, specialty2, specialty3
Однако, конечно, это выводится следующим образом:
specialty1, specialty2, specialty3,
Как удалить последнюю запятую, когда я повторяю каждую специальность отдельно, а не массив в целом? Есть лучший способ сделать это?
Я попробовал решение из этого потока: Удаление последней запятой из цикла foreach, но я думаю, что способ хранения данных (, specialty1 ,, specialty2 ,, specialty3) вызывает проблему с этим решением.
Взрыв в одной запятой, используйте array_filter
для удаления пустых записей и implode
чтобы присоединиться к значениям:
public function unserializeArray($string) {
return array_values(array_filter(explode(',' $string)));
}
...
echo implode(',',$sw::shared()->users->unserializeArray($specialties));
Это должно сработать для вас:
$str= rtrim($str, ',');