#php #mysql #arrays
#php #mysql #массивы
Вопрос:
Мне нужна одна помощь. Мне нужно вставить несколько данных в соответствии с некоторым значением объекта Json в таблицу с использованием PHP и MySQL. Я объясняю свой код ниже.
$commnt=[{
'day_id':2,
'comment':'vodka1'
},{
'day_id':3,
'comment':'vodka2'
}
]
$result=[{
'day_id':1,
'restaurant':'193'
},{
'day_id':2,
'restaurant':'193'
},{
'day_id':3,
'restaurant':'193'
}
]
Здесь мне нужно ввести все данные из обоих объектов Json в приведенную ниже таблицу согласно day_id
. Я объясняю столбец моей таблицы ниже.
db_details:
id day_id restaurant comment
Здесь мое требование заключается в том, когда day_id
же соответствующее comment
значение поля будет введено в таблицу, в противном случае comment
поданное значение останется пустым.Ожидаемый результат приведен ниже.
id day_id restaurant comment
1 1 193
2 2 193 vodka1
3 3 193 vodka3
Мой запрос приведен ниже.
$insertintodetails=mysqli_query($connect,'INSERT INTO db_details
(day_id,restaurant,comment) values ("'. $result.'","'.$result[$i]['restaurant'].'","'.$commnt[$i]['comment'].'")');
Здесь может быть много вариантов использования, например, длина обоих объектов Json может быть одинаковой или разной, но комментарий должен быть вставлен в соответствии day_id
с, иначе он останется пустым. В моем запросе я не могу вставить в соответствии с требованиями. Пожалуйста, помогите мне решить эту проблему.
Комментарии:
1. $commnt — это не массив, это объект json
2. где ваш array ()
3. Извините, пожалуйста, проверьте мой обновленный пост.
4. все еще это json.
5. вы можете использовать
json_decode
для некоторого преобразования в массив
Ответ №1:
$newArray = $insertintodetails = array();
foreach($result as $rs)
{
$newArray[$rs->day_id] = [
"`day_id`=>'{$rs->day_id}'",
"`restaurant`=>'{$rs->restaurant}'"
];
}
foreach($commnt as $rs){
$newArray[$rs->day_id][] = "`comment`='{$rs->comment}'";
}
foreach($newArray as $rs){
$insertintodetails[]=mysqli_query($connect,'INSERT INTO db_details SET '.implode(',',$rs));
}
Комментарии:
1. я проверю и дам вам знать.
2. @ hackout : в вашем коде отсутствует некоторый foreach
{}
.3. это не работает, проверьте свой код должным образом. Грядет много ошибок.
Ответ №2:
Я создаю пример из приведенных выше деталей вашего вопроса. Вы можете попробовать приведенный ниже код. И это должно сработать для вас…
//For example taken array and convert it to JSON
$comment = json_encode(array(array('day_id' => '2', 'comment' => 'vodka1'), array('day_id' => '3', 'comment' => 'vodka2')));
$result = json_encode(array(array('day_id' => '1', 'restaurant' => '193'), array('day_id' => '2', 'restaurant' => '193'), array('day_id' => '3', 'restaurant' => '193')));
//Convert JSON to array...
$arrComment = json_decode($comment, true);
$arrResult = json_decode($result, true);
foreach($arrResult AS $keyResult => $dataResult){
$day_id = $dataResult['day_id'];//day_id
$restaurant = $dataResult['restaurant'];//rasturant
$strComment = '';//comment
//Check and extract comment value from multi dimensional comment($arrComment) array...
if($getComment = find_comment_with_dayid($arrComment, $day_id)){
$strComment = $getComment;
}
//Insert records...
$insertintodetails=mysqli_query($connect,'INSERT INTO db_details
(day_id, restaurant, comment) values ("'. $day_id .'","'. $restaurant .'","'. $strComment .'")');
}
//Function will return comment for matched day_id
function find_comment_with_dayid($arrComment, $fieldKey) {
foreach($arrComment as $indCommenr => $dataComment) {
//Check for day_id, matched then return comment...
if($dataComment['day_id'] == $fieldKey) return $dataComment['comment'];
}
return FALSE;
}
Здесь я взял пример массива, чтобы избежать проблемы с JSON, о которой сообщалось в вашем вопросе. Надеюсь, это сработает хорошо!
Комментарии:
1. Нет, он работает правильно.
{"day_id":"2","restaurant":"193","comment":""}
поставляется с пустым значением комментария.2. Это можно было бы значительно улучшить, объединив строки для вставки в один оператор вместо одного
INSERT
оператора для каждой строки. Хотя это может не иметь большого значения для небольших наборов данных, это может быть очень полезно по мере расширения приложения. Итак, на данный момент -1, но если вы отредактируете свой пост, я пересмотрю его. Для получения дополнительной информации см. Справочный раздел MySQL о INSERT