PHP

Передача json строки php to js

Суть такова есть php файл в котором происходит выборка с базы данных и формируется json строка. и есть файл на стороне клиента который в таблице выводит эти данные. У меня не получается взять данные с пхп документа, тогда я сгенерировал выходную строку и вставил ее в текстовый файл, а с текстового файла все берет. Подскажите что нужно мне подправить?
листинг серверного файла:
?php
function json($json,$num){
$arr1 = explode('/', $json);
$arr2 = implode(',', $arr1);
$arr3 = explode('|', $arr2);
$arr4 = array_diff($arr3, array(''));
$arr = implode(',', $arr4);
$fine = json_encode($arr);
$a = ' {"find_game": [';
$b = '],"array_num": '.$num.'}';
$json_clear = $a.json_decode($fine).$b;
return $json_clear;
}
require_once $_SERVER['DOCUMENT_ROOT'].'/bd.php';
$query="SELECT * FROM `My_BD`.`game` WHERE `status`='0'";
$res = mysql_query($query);
while($module = mysql_fetch_array($res)){
// время игры
$BLC1=$module['BLC1']; $time_game=$BLC1;
$BLC3=$module['BLC3']; if ($time_game<=$BLC3){$time_game=$BLC3;}
$BLC5=$module['BLC5']; if ($time_game<=$BLC5){$time_game=$BLC5;}
$BLC10=$module['BLC10']; if ($time_game<=$BLC10){$time_game=$BLC10;}
$BLC15=$module['BLC15']; if ($time_game<=$BLC15){$time_game=$BLC15;}
$BLC30=$module['BLC30']; if ($time_game<=$BLC30){$time_game=$BLC30;}
$BLC60=$module['BLC60']; if ($time_game<=$BLC60){$time_game=$BLC60;}

$modules .= '{"0":"'.$i.'"/ "1":"'.$module['Playar1'].'"/ "2":"'.$time_game.'"/ "3":"'.$module['Pribavka_na_hod'].'"/ "4":"'.$module['NGame'].'"}|';
$i++;}
$num=$i-1;
//echo json($modules,$num);
$resultJson = json($modules,$num);
header('Content-Type: application/json');
// echo $resultJson;

?
листниг файла на стороне клиента
Anar Amirov
Anar Amirov
2 479
Итак, что делает твоя функция json?

1. Она берёт строку $json и заменяет в ней символы '/' на ',' - формируя строку $arr2. Вместо одного вызова str_replace зачем-то используются explode / implode.
2. Потом она берёт строку arr2 и заменяет каждую группу из одного и более подряд идущих символов '|' на один символ ',' - формируя строку $arr. Вместо одного вызова preg_replace зачем-то используются explode, array_diff, implode.
3. К получившейся строке ты дописываешь слева ' {"find_game": [' (зачем-то вставляя пробел перед '{') и справа '],"array_num": '.$num.'}'. Зачем-то вместо простой конкатенации строк ты сначала делаешь json_encode, потом json_decode.

Вся твоя функция json заменяется на:

function json($json, $num) {
return '{"find_game": [' . preg_replace(['#/#', '#(^\|+|\|+$)#', '#\|+#'], [',', '', ','], $json) . '],"array_num": ' . $num . '}';
}

При этом у тебя формируется НЕ ВАЛИДНЫЙ JSON, т. к. внутри [] в JSON НЕЛЬЗЯ указывать индексы.

Если же выкинуть весь твой бред с формированием, а потом преобразованием строк, то всё твоё формирование JSON сводится к:

$result = ['find_game' => []];
$query="SELECT * FROM `My_BD`.`game` WHERE `status`='0'";
$res = mysql_query($query);
while($module = mysql_fetch_array($res)) {
// Здесь твои вычисления $time_game
$result['find_game'][] = [count($result['find_game']), $module['Playar1'], $time_game, $module['Pribavka_na_hod'], $module['NGame']];
}
$result['find_game']['array_num'] = count($result['find_game']) - 1;
header('Content-Type: application/json; charset=utf-8');
echo json_encode($result);

P.S. ЗАЧЕМ ты записываешь в массив $i, и зачем тебе array_num - когда в JavaScript есть for - in и .length?

P.P.S. ЗАЧЕМ ты используешь давно протухшие функции mysql_*, выброшенные (наконец-то) из PHP 7?

P.P.P.S. Твой JS-код не анализировал, но то, что ты используешь Array() вместо [], выглядит достаточно странно.
Олег Таранец
Олег Таранец
88 854
Лучший ответ
Anar Amirov Здравствуйте, с наступающим Вас новым годом, спасибо что так углубились в мою писанину.
1. ну все эти преобразования игры со строками я делал потому как я не научился пользоваться мат выражениями, но после этих всех преобразований на выходе я получаю валидную json строку, дабы в этом убедится я специально ее загнал в текстовый файл и сделал вывод с текстового файла, вот пример, того что я имею на выходе:
{"find_game": [{"0":"", "1":"nikolaykp", "2":"300", "3":"5", "4":"_5c0f2f47a6040"},
{"0":"1", "1":"nikolaykp", "2":"60", "3":"0", "4":"_5c0f2f7dcbdb8"}, ..
{"0":"12", "1":"nikolaykp", "2":"60", "3":"0", "4":"5c20dff079568"}],"array_num": 12}
спасибо за мат выражение я щас упрошу код.
2. записываю по старинке... array_num, хорошо что в джава скрипт есть for - in и .length.
Anar Amirov 3. я в курсе уже не первый раз вы меня в устаревшие функции тыкаете), я исправлю их щас.