Я получаю данные json this
$sql=mysqli_query($con,"select * FROM mohamiusermeta where meta_key='websiteurl' or meta_key='profile_photo' or meta_key = 'Office' or meta_key='address_user' or meta_key='agentarea' or meta_key='offertext' or meta_key='officename' or meta_key='cover_photo' or meta_key='membertype' order by user_id desc");
$newarray = array();
$subArray = array();
while($row=mysqli_fetch_assoc($sql))
{
$output[$row['meta_key']] = $row['meta_value'];
$subArray[user_id]=$row['user_id'];
$subArray[Office]=$output['Office'];
$subArray[officename]=$output['officename'];
$subArray[address_user]=$output['address_user'];
$subArray[profile_photo]=$output['profile_photo'];
$subArray[cover_photo]=$output['cover_photo'];
$subArray[agentarea]=$output['agentarea'];
$subArray[offertext]=$output['offertext'];
$subArray[websiteurl]=$output['websiteurl'];
$subArray[membertype]=$output['membertype'];
$newarray[] = $subArray;
}
json_encode($newarray);
echo(json_encode($newarray,JSON_UNESCAPED_UNICODE));
mysqli_close();
?>
но результат в браузере получает значение null и дублирующее значение для первой строки, где он имеет значение в базе данных
что неправильно в выборке массива? проверить результат в браузере http://lifecareclub.net/api/test.php
Вы $newarray
то, что уже добавлено в $newarray
в следующей итерации, когда вы изменяете членов $subArray
.
Чтобы решить эту проблему, переместите $subArray = array();
внутри цикла, непосредственно перед первым назначением на один из его ключей. Таким образом, вы создаете новый массив на каждой итерации, который "отсекает его" из данных, которые вы назначили своим членам в предыдущей итерации.
NB: вам нужно использовать кавычки в $subArray['user_id'] =...
и другие назначения, но я полагаю, что это опечатка в вашем вопросе.
Здесь я вижу несколько проблем с тем, как результаты запроса извлекаются из базы данных и преобразуются в ваш массив. В общем, для отладки таких проблем вы должны посмотреть на значения ваших переменных на этом пути и посмотреть, соответствуют ли они ожиданиям.
Например, если вы положите
var_dump($output);
в вашем цикле, прежде чем вы начнете использовать $output
для установки значений в $subArray
, вы увидите, что у него нет всей информации, которую вы думаете.
Примечание: если вы используете Ajax для вызова функции, вам нужно научиться использовать инструменты отладки браузера, чтобы посмотреть на точные данные, возвращаемые с сервера. Таким образом, вы можете вернуть результаты, не связанные с JSON, и посмотреть, что действительно происходит. В этом случае вы увидите, что возвращаемые данные на самом деле являются сообщением об ошибке, которое поможет вам разобраться в следующем шаге.
Я не хочу писать код для вас, но вот несколько вещей, которые вы можете сделать, чтобы улучшить свой код. Я предполагаю, что такие вещи, как officename
являются столбцами в вашей таблице базы данных, которые возвращаются SELECT
.
$sql=mysqli_query($con,"select * FROM mohamiusermeta where meta_key IN ('websiteurl', 'profile_photo', 'Office', 'address_user', 'agentarea', 'offertext' , 'officename', 'cover_photo', 'membertype') order by user_id desc");
$newarray = array();
while($row = mysqli_fetch_assoc($sql))
{
$subArray = array();
$subArray[$row['meta_key']] = $row['meta_value'];
$subArray['user_id'] = $row['user_id'];
$subArray['Office'] = $row['Office'];
$subArray['officename'] = $row['officename'];
$subArray['address_user'] = $row['address_user'];
$subArray['profile_photo'] = $row['profile_photo'];
$subArray['cover_photo'] = $row['cover_photo'];
$subArray['agentarea'] = $row['agentarea'];
$subArray['offertext'] = $row['offertext'];
$subArray['websiteurl'] = $row['websiteurl'];
$subArray['membertype'] = $row['membertype'];
$newarray[] = $subArray;
}
echo(json_encode($newarray,JSON_UNESCAPED_UNICODE));
mysqli_close();
Вещи, которые я изменил:
IN
чтобы сократить список и сделать его более понятным.$output
$subArray
Заметки стиля:
Последнее замечание: похоже, что весь этот код делает немного больше, чем создание новой копии $row
. Рассмотрите возможность замены всего на $newarray[] = $row;
и передавая meta_key и meta_value на стороне javascript.
$newarray
значения, которые вы ожидаете.var_dump()
полезен для этого. Кажется, у вас естьjson_encode($newarray)
строкаjson_encode($newarray)
, но она должна быть безвредной. Однако вы можете сравнить результаты этой строки с результатом следующей строки, чтобы увидеть, являетсяJSON_UNESCAPED_UNICODE
флагJSON_UNESCAPED_UNICODE
причиной вашей проблемы.