PHP: выводит в строке “\'” вместо “'”

184
14 марта 2017, 16:20

Здравствуйте. Помогите разобраться, пожалуйста. Есть следующий код:

$str = "";
        $total = count($rows);
        $counter = 0;
        foreach ($rows as $item) {
            $out[$item['id']] = $item;
            $counter++;
            if($counter == 1) {
                $str .= $item['id']."'".",";
            }
            if($counter == $total){
                $str .= "'".$item['id'];
            }
            else{
                $str .= "'".$item['id']."'".",";
            }

В строку должны записываться ID, разделяясь , и ' (первая и последняя кавычка ставится автоматически). Вот только результат получается вот такой:

'72142\',\'72142\',\'72133\',\'67568\',\'67115\',\'67163\',\'67165\',\'67199\',\'67222\',\'67240\',\'67321\',\'67334\',\'67427\',\'72113\',\'82066\',\'81981\',\'73940\',\'66886\',\'66875\',\'66843\',\'66824\',\'66810\',\'66798\',\'72193\',\'66482\',\'66475\',\'66473\',\'66462\',\'66448\',\'66437\',\'66435'

А нужно, чтобы получилось вот так:

'72142','72142','72133','67568','67115','67163','67165','67199','67222','67240','67321','67334','67427','72113','82066','81981','73940','66886','66875','66843','66824','66810','66798','72193','66482','66475','66473','66462','66448','66437','66435'

Не понимаю, почему выводит кавычку вместе со слешом.

Answer 1

Не извращайтесь с циклами, для этого хорошо работает функциональный стиль.

  • array_map - каждый элемент массива отобразить в новый массив, как результат вызова функции
  • implode - склеить элементы массива с помощью разделителя

Пример:

$rows = [13, 132, 834];
echo implode(',', array_map(function($row){
    return "'{$row}'";
}, $rows));
// '13','132','834'  

Демонстрация

C id:

$rows = [['id' => 13], ['id' => 132], ['id' => 834]];
$out = array_reduce($rows, function($res, $row){
  $res[$row['id']] = $row;
  return $res;
}, []);
$str = implode(',', array_map(function($row){
    return "'{$row['id']}'";
}, $rows));
echo $str . "\n";
echo json_encode($out);

Вывод:

'13','132','834'
{"13":{"id":13},"132":{"id":132},"834":{"id":834}}

Демонстрация

По поводу проблемы из вопроса, думаю она надумана, вы выводите результат в каком-нибудь var_dump, который экранирует кавычки для корректного отображения. Также, никаких автоматических апострофов там нет, это просто формат вывода

READ ALSO
Работа с функциями

Работа с функциями

Есть функция удаления динамических компонентов:

194
Android-уведомление на Qt

Android-уведомление на Qt

Здравствуйте! Пишу небольшое приложение на Qt для андроидИ интересно стало, как присылать пользователю уведомления? Например: "Уже 8 часов...

389
Плагины для sublime text 3

Плагины для sublime text 3

Добрый день, подскажите пожалуйста полезные плагины для удобного написания кода на С++ в sublime text 3

304