|
|
|
| приветствую!
как можно сначала разобрать массив а потом его собрать обратно?
есть код:
Изначальный вид Ассоциативного массива:
Array
(
[myarray] => Array
(
[5] => Текст пятый
[6] => Текст шестой
)
[mybutton] => Submit
)
|
Теперь нужно к элементам этого массива добавить к примеру текст из переменной чтобы в начале каждого стояло значение переменной
причем переменная динамическая и берется из БД
<?php
$query = "SELECT * FROM mytable";
$res = mysql_query($query) or die(mysql_error());
foreach($_POST['myarray'] as $key=> $value)
{
while ($row = mysql_fetch_array($res)) {
$valuearr= $row['myaddtext'].$value;
$valuearrfull .= array($key=>$valuearr);
}
}
echo "<pre>";
print_r($valuearrfull);
echo "<pre>";
?>
|
как лучше это сделать? при моем варианте получаю просто ArrayArray | |
|
|
|
|
|
|
|
для: tima2010
(19.09.2011 в 16:58)
| | попробуйте так:
<?php
$query = "SELECT * FROM mytable";
$res = mysql_query($query) or die(mysql_error());
foreach($_POST['myarray'] as $key=> $value)
{
while ($row = mysql_fetch_array($res)) {
$valuearr= $row['myaddtext'].$value;
$valuearrfull[$key][]=$valuearr;
}
}
echo "<pre>";
print_r($valuearrfull);
echo "<pre>";
?>
|
в результате вы получите двумерный массив. Не совсем понятно что вы хотите получить в итоге... | |
|
|
|
|
|
|
|
для: Lotanaen
(19.09.2011 в 17:18)
| | Все понял спасибо!
как всегда это просто кусок кода из много строчного текста
чтобы показать что хочу в итоге придется размещать много строк которые будут только мешать пониманию простой задачи
еще раз Спасибо! | |
|
|
|
|
|
|
|
для: Lotanaen
(19.09.2011 в 17:18)
| | извините но, что-то не то получается
принял ваше решение
в итоге получился такое код
<?php
$query = "SELECT * FROM mytable";
$res = mysql_query($query) or die(mysql_error());
foreach($_POST['myarray'] as $key=> $value)
{
while ($row = mysql_fetch_array($res)) {
$valuearr= $row['myaddtext'].$value;
$valuearrfull[$key]=$valuearr;
}
}
echo "<pre>";
print_r($valuearrfull);
echo "<pre>";
?>
|
но данные foreach а именно переменные $key $value принимает только первое значение... получается вид такой:
Array
(
[myarray] => Array
(
[5] => Добавили текст 1 Текст пятый
[5] => Добавили текст 2 Текст пятый
)
[mybutton] => Submit
)
|
| |
|
|
|
|
|
|
|
для: tima2010
(19.09.2011 в 18:31)
| | а что вам в итоге нужно получить? массив исходный должен остаться без добавления новых значений, а только изменение старых? Или каждому значению добавить новый массив? если первое, то по какому принципу из БД добавлять текст? (если второе, то как раз мой вариант подходит). | |
|
|
|
|
|
|
|
для: Lotanaen
(20.09.2011 в 09:12)
| | у меня при таком коде
почему то $value принимает только свое первое значение в цикле
тоесть с вашим методом получаю
Array
(
[myarray] => Array
(
[5] => Добавили текст 1 ТЕКСТ ПЯТЫЙ
[5] => Добавили текст 2 ТЕКСТ ПЯТЫЙ
)
[mybutton] => Submit
)
|
а нужно получить
Array
(
[myarray] => Array
(
[5] => Добавили текст 1 Текст ПЯТЫЙ
[6] => Добавили текст 2 Текст ШЕСТОЙ
)
[mybutton] => Submit
)
|
на данный момент код который выводит не верный вариант выглядит так:
<?php
$query = "SELECT * FROM mytable ORDER BY `myid`";
$res = mysql_query($query) or die(mysql_error());
foreach($_POST['myarray'] as $key=> $value) { // раскрываем массив
while ($row = mysql_fetch_array($res)) { // получаем текст из базы который нам нужен
$valuearr= $row['myaddtext'].$value; // к содержимому тексту массива добавляем из базы текст
$valuearrfull[$key] = $valuearr; // формируем обратно массив
}
}
echo "<pre>";
print_r($valuearrfull);
echo "<pre>";
/*
Array
(
[myarray] => Array
(
[5] => Добавили текст 1 ТЕКСТ ПЯТЫЙ // верно
[5] => Добавили текст 2 ТЕКСТ ПЯТЫЙ // НЕ ВЕРНО должен быть шестой
)
[mybutton] => Submit
)
*/
?>
|
p.s. Массив отсортирован таким образом что добавляемые данные из базы совпадают по верному порядку, т.к. вывод данных из базы сортируем по myid | |
|
|
|
|
|
|
|
для: tima2010
(20.09.2011 в 11:00)
| | ну попробуйте тогда так:
<?php
$query = "SELECT * FROM mytable ORDER BY `myid`";
$res = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($res))
$tmp[] = $row;
$i=0;
foreach($_POST['myarray'] as $key=> $value) { // раскрываем массив
$valuearr= $tmp[$i]['myaddtext'].$value; // к содержимому тексту массива добавляем из базы текст
$valuearrfull[$key] = $valuearr; // формируем обратно массив
$i++;
}
echo "<pre>";
print_r($valuearrfull);
echo "<pre>";
/*
Array
(
[myarray] => Array
(
[5] => Добавили текст 1 ТЕКСТ ПЯТЫЙ // верно
[5] => Добавили текст 2 ТЕКСТ ПЯТЫЙ // НЕ ВЕРНО должен быть шестой
)
[mybutton] => Submit
)
*/
?>
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(20.09.2011 в 11:07)
| | хм, что то не то, проблема в этой строке
$valuearr= $row['myaddtext'].$value; // цикл на данный момент состоит из двух элементов но $value принимает только первое значение...
|
здесь $value принимает только первое значение цикла а нужно первое и второе | |
|
|
|
|
|
|
|
для: tima2010
(20.09.2011 в 11:40)
| | что в итоге вы хотите получить? вот у вас два массива, например: (1,2,3,4) из $_POST и (5,6) из БД - что в итоге должно быть, не совсем понятно... | |
|
|
|
|
|
|
|
для: tima2010
(20.09.2011 в 11:40)
| | возможно так?
<?php
$query = "SELECT * FROM mytable ORDER BY `myid`";
$res = mysql_query($query) or die(mysql_error());
$i=0;
foreach($_POST['myarray'] as $key=> $value) { // раскрываем массив
while ($row = mysql_fetch_array($res)) { // получаем текст из базы который нам нужен
$valuearr= $row['myaddtext'].$value; // к содержимому тексту массива добавляем из базы текст
$valuearrfull[$i] = $valuearr; // формируем обратно массив
$i++;
}
}
echo "<pre>";
print_r($valuearrfull);
echo "<pre>";
/*
Array
(
[myarray] => Array
(
[5] => Добавили текст 1 ТЕКСТ ПЯТЫЙ // верно
[5] => Добавили текст 2 ТЕКСТ ПЯТЫЙ // НЕ ВЕРНО должен быть шестой
)
[mybutton] => Submit
)
*/
?>
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(20.09.2011 в 12:03)
| | попробую объяснить проще, что не получается
<?php
$query = "SELECT * FROM mytable";
$res = mysql_query($query) or die(mysql_error());
foreach($_POST['myarray'] as $key=> $value)
{
echo $value.", "; // при выводе покажет нам 5, 6
while ($row = mysql_fetch_array($res)) {
$valuearr= $row['myaddtext'].$value; // здесь $value при выводе покажет нам только 5, почему то не передается второе значение переменной
$valuearrfull[$key]=$valuearr;
}
}
echo "<pre>";
print_r($valuearrfull);
echo "<pre>";
?>
|
| |
|
|
|
|
|
|
|
для: tima2010
(22.09.2011 в 13:17)
| | получается почему то в цикле foreach цикл while выполняется всего 1 раз... ((((( | |
|
|
|
|
|
|
|
для: tima2010
(22.09.2011 в 13:17)
| | Дело в том, что при проходе по результирующей таблице, указатель остается в конце, чтобы снова запустить просмотр результирующей таблицы, его нужно установить в начало. Т.е. ваш скрипт скорее всего должен выглядеть так
<?php
$query = "SELECT * FROM mytable";
$res = mysql_query($query) or die(mysql_error());
foreach($_POST['myarray'] as $key=> $value)
{
echo $value.", "; // при выводе покажет нам 5, 6
// Устанавливаем указатель в начало результирующей таблицы
// на каждой итерации цикла
mysql_data_seek($res, 0);
// Теперь со спокойной душой читаем записи от начала
// результирующей таблицы до конца
while ($row = mysql_fetch_array($res)) {
$valuearr= $row['myaddtext'].$value;
$valuearrfull[$key]=$valuearr;
}
}
echo "<pre>";
print_r($valuearrfull);
echo "<pre>";
?>
|
| |
|
|
|
|
|
|
|
для: tima2010
(22.09.2011 в 13:17)
| | так вы же запрос при втором проходе не делаете, т.е. тогда нужно так:
<?php
//$query = "SELECT * FROM mytable";
//$res = mysql_query($query) or die(mysql_error());
foreach($_POST['myarray'] as $key=> $value)
{
echo $value.", "; // при выводе покажет нам 5, 6
$query = "SELECT * FROM mytable";
$res = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($res)) {
$valuearr= $row['myaddtext'].$value; // здесь $value при выводе покажет нам только 5, почему то не передается второе значение переменной
$valuearrfull[$key]=$valuearr;
}
}
echo "<pre>";
print_r($valuearrfull);
echo "<pre>";
?>
|
а лучше в массив сначала загнать и потом массив через foreach прогнать... ну или так как выше предложили... | |
|
|
|
|
|
|
|
для: Lotanaen
(22.09.2011 в 13:30)
| | Уважаемые cheops и Lotanaen, спасибо за терпение но в обоих случаях теперь принимается только второе значение переменной $value в цикле... (
p.s. сошел с ума | |
|
|
|
|
|
|
|
для: tima2010
(22.09.2011 в 13:47)
| | Как у вас сейчас выглядит скрипт и что он выводит? | |
|
|
|
|
|
|
|
для: cheops
(22.09.2011 в 13:52)
| | Код скрипта:
В sql есть данные:
sorting - порядок отображения
myaddtext - добавляемый текст
Форма:
<form method="POST" action="index.php" name="update">
<?php
$query = "SELECT * FROM mytable ORDER BY `sorting`";
$res = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($res)) {
echo '<input type="text" name="myarray['.$row['sorting'].']"> <br />'; // где sorting это порядок отображения
}
?>
<input type="submit" value="Go" name="mybutton">
</form>
|
После нажатия к каждому введенному тексту через INPUT TEXT нужно добавить значение myaddtext из базы данных И при этом сохранить массив
Обработка массива:
<?php
if (isset($_POST['mybutton'])) {
$query = "SELECT * FROM mytable ORDER BY `sorting`";
$res = mysql_query($query) or die(mysql_error());
foreach($_POST['myarray'] as $key => $value)
{
while ($row = mysql_fetch_array($res)) {
$valuearr = $row['myaddtext']." - ".$value; // сюда не могу передать все значения что бы к каждому добавить нужный текст, передается только первое значение массива myarray
$valuearrfull[$row['sorting']] = $valuearr;
}
}
}
?>
|
в этом коде выводит
Array
(
[5] => Добавили текст 1 текст ПЯТЫЙ // верно
[6] => Добавили текст 2 текст ПЯТЫЙ // не верно, должен быть текст ШЕСТОЙ
)
|
примерно так | |
|
|
|
|
|
|
|
для: tima2010
(22.09.2011 в 13:47)
| | я же вам приводил пример раньше - вас он чем-то не устроил...
<?php
$query = "SELECT * FROM mytable ORDER BY `myid`";
$res = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($res))
$tmp[] = $row;
$i=0;
foreach($_POST['myarray'] as $key=> $value) { // раскрываем массив
$valuearr= $tmp[$i]['myaddtext'].$value; // к содержимому тексту массива добавляем из базы текст
$valuearrfull[$key] = $valuearr; // формируем обратно массив
$i++;
}
echo "<pre>";
print_r($valuearrfull);
echo "<pre>";
/*
Array
(
[myarray] => Array
(
[5] => Добавили текст 1 ТЕКСТ ПЯТЫЙ // верно
[5] => Добавили текст 2 ТЕКСТ ПЯТЫЙ // НЕ ВЕРНО должен быть шестой
)
[mybutton] => Submit
)
*/
?>
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(22.09.2011 в 13:57)
| | пожалуйста извините вариант рабочий я не верно понял принцип его работы...
одна проблема в этом варианте, добавляется лишнее значение
Array
(
[] => ТЕКСТ ШЕСТОЙ
[5] => Добавили текст 1 ТЕКСТ ПЯТЫЙ // верно
[6] => Добавили текст 2 ТЕКСТ ШЕСТОЙ // верно
)
|
будто foreach насчитал 3 а не 2
зачем то пихает последнее значение $value еще раз | |
|
|
|
|
|
|
|
для: tima2010
(22.09.2011 в 14:18)
| | придется удалять первое значение массива типа unset ? | |
|
|
|
|
|
|
|
для: tima2010
(22.09.2011 в 14:18)
| | а вы этот массив ранее не используете? перед циклом объявите его | |
|
|
|
|
|
|
|
для: Lotanaen
(22.09.2011 в 15:11)
| | не используется :( перед циклом получаю:
Array
(
[5] => Текст пятый
[6] => Текст шестой
)
|
сразу после вашего способа вывожу массив вижу:
Array
(
[5] => Добавили текст 1 ТЕКСТ ПЯТЫЙ // верно
[] => ТЕКСТ ШЕСТОЙ
[6] => Добавили текст 2 ТЕКСТ ШЕСТОЙ // верно
)
|
| |
|
|
|
|
|
|
|
для: tima2010
(22.09.2011 в 15:15)
| | а такой вариант попробуйте:
<?php
if (sizeof($_POST['myarray'])) {
$valuearrfull = array();
$query = "SELECT * FROM mytable ORDER BY `sorting`";
$res = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($res))
$valuearrfull[$row['sorting']] = $row['myaddtext']." - ".$_POST['myarray'][$row['sorting']];
}
echo "<pre>";
print_r($valuearrfull);
echo "<pre>";
?>
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(22.09.2011 в 15:11)
| | Все понял! Лишние скобки поставил....
Спасибо Lotanaen!!! | |
|
|
|