Доброго времени суток, Уважаемые программисты! Помогите пожалуйста решить!) Есть массив с данными : $arr = ( [0] => 22 [1] => Array ( [0] => good1.jpg [1] => good5.jpg ) [2] => Array ( [0] => Ножик [1] => Ножик ) [3] => Array ( [0] => 15000 [1] => 300 ) [4] => Array ( [0] => 15000 [1] => 300 ) [5] => Array ( [0] => 1 [1] => 1 ) ) Необходимо все данные записать в БД
$arr = []; //Заполняем конечный массив для внесения в БД array_push($arr, $img, $name, $price, $price2, $count); $arr = implode(", ", $arr); $result3 = $mysql->query("INSERT INTO `cart_good` (`idd`, `img`, `name`, `price`, `price2`, `count`) VALUES ($arr)");
array_push($arr, $img, $name, $price, $price2, $count); $images = implode(", ", $arr[0]); $names = implode(", ", $arr[1]); $prices = implode(", ", $arr[2]); $prices2 = implode(", ", $arr[3]); $counts = implode(", ", $arr[4]); $result3 = $mysql->query("INSERTINTO `cart_good` (`idd`, `img`, `name`, `price`, `price2`, `count`) VALUES ('$idd', '$images', '$names', '$prices', '$prices2', '$counts')"); Данный код записывает в БД в одну строку, а надо чтобы записывала в нужное количество строк, так как в каждом массиве ($arr[0] ...) есть n количество значений, помогите пожалуйста. Спасибо.
PHP: <?php $data = array(array('int1', 'str1', 'str1'), array('int2', 'str2', 'str2'), array('int3', 'str3', 'str3'), array('int4', 'str4', 'str4'), array('int5', 'str5', 'str5')); $sql = "INSERT IGNORE INTO `table` (`col1`, `col2`, `col3`) VALUES "; $values_format = "('%s', '%s', '%s'), "; foreach($data as $values) { $sql .= vsprintf($values_format, $values); } $sql = rtrim($sql, ', '). ';'; echo $sql; ?> ##собрать sql запрос
Вывовдит строку как положенно но вот не записывает в БД и выдает ошибку <b>Fatal error</b>: Uncaught mysqli_sql_exception: Column count doesn't match value count at row 1 in C:\xampp\htdocs\Kazbek\php\function\zakaz.php:88
Array ( [0] => Array ( [0] => good1.jpg [1] => good5.jpg ) [1] => Array ( [0] => Ножик [1] => Ножик ) [2] => Array ( [0] => 15000 [1] => 300 ) [3] => Array ( [0] => 15000 [1] => 300 ) [4] => Array ( [0] => 1 [1] => 1 ) ) Вот такой массив
PHP: <?php $data = array(array('int1', 'str1'), //по два элемента array('int2', 'str2'), array('int3', 'str3'), array('int4', 'str4'), array('int5', 'str5')); $sql = "INSERT IGNORE INTO `table` (`col1`, `col2`) VALUES "; //в две колонки $values_format = "('%s', '%s'), "; //по два элемента foreach($data as $values) { $sql .= vsprintf($values_format, $values); } $sql = rtrim($sql, ', '). ';'; echo $sql; ?>
Как говорится, тема в тему, как раз то что сейчас нужно. Подскажите, а как вот такой массив привести к такому же виду, как у топикстартера? PHP: Array ( [0] => Array ( [product_id] => 9 [category_id] => Array ( [0] => 2 [1] => 15 ) ) [1] => Array ( [product_id] => 10779 [category_id] => Array ( [0] => 1389 ) ) ) то есть, мне нужно получить вот такое PHP: Array ( [0] => Array ( [0] => 9 [1] => 2 ) [1] => Array ( [0] => 9 [1] => 15 ) [2] => Array ( [0] => 10779 [1] => 1389 ) ) Пока самый лучший, но незаконченный результат получился вот из такого кода PHP: foreach ($array as $key => $value){ foreach($value['category_id'] as $k => $cats){ $arr[$key][] = $cats; foreach($arr as $r => $res){ $result[][] = $value['product_id']; } } } но это не то, что нужно. Заранее благодарю!
непонятно какого вида вы хотите получить конечный массив... приведите пример ... в целом подход верный...циклы в циклах
Так а есть же пример в моем вопросе, под фразой "то есть, мне нужно получить вот такое" Цикл в циклах я понимаю, но дальше третьего цикла все, ничего не получается, второй день мучаюсь
PHP: $result= []; foreach ($array as $value){ foreach($value['category_id'] as $cats){ $result[] . = [$cats, $value['product_id']]; } } как-то так
Супер, спасибо! только строку 4 немного допиливать надо PHP: $result[] = [$value['product_id'], $cats]; без точки и элементы наоборот, а так все здорово, еще раз спасибо!