Подскажите как перебрать массив так, чтобы выбрать сначала значения:
1,2,3
затем
11,22,33
далее
111,222,333
(дело в том, что записей в value1,value2,value3 может быть больше 3х.)
$_POST =
Array
(
[ok] => Отправить запрос
[nameTable] => tab1
[value1] => Array
(
[0] => 1
[1] => 11
[2] => 111
)
[value2] => Array
(
[0] => 2
[1] => 22
[2] => 222
)
[value3] => Array
(
[0] => 3
[1] => 33
[2] => 333
)
)
Спустя 40 минут, 8 секунд (24.01.2011 - 19:39) sergeiss написал(а):
Для начала "штатный" вопрос: свои мысли какие?
Спустя 40 минут, 44 секунды (24.01.2011 - 20:20) dima4321 написал(а):
Самому стало интересно. Думал сортировка.но мой код не справляется с задачей..
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
$m=array('value1'=>array('1','7','2'),'value2'=>array('5','6','4'));
asort($m);
foreach($m as $value)
{
foreach($value as $n)
{
echo $n .'<br>';
}
}
?>
Спустя 6 минут, 33 секунды (24.01.2011 - 20:27) myconstitution написал(а):
мысли такие:
Видно, что нужные значения связаны ключами [value1][0],[value1][1],[value1][2].
Видно, что нужные значения связаны ключами [value1][0],[value1][1],[value1][2].
foreach ($_POST as $val => $id)
{
$row["$id"]['value1'] = $_POST['value1']["$id"];
$row["$id"]['value2'] = $_POST['value2']["$id"];
$row["$id"]['value3'] = $_POST['value3']["$id"];
// запись равнозначна?
// $row["$id"]["$val"] = $val["$id"];
}
Спустя 4 минуты, 25 секунд (24.01.2011 - 20:31) inpost написал(а):
Все value1,value2,value3 сгруппировать в общий массив value, а далее
$x = count($_POST['value']['value1']) - 1;
for (i=0; i==x;i++)
{
foreach($_POST['value'] as $k=>$v)
{
echo $v[$i];
}
}
Спустя 19 минут, 1 секунда (24.01.2011 - 20:50) myconstitution написал(а):
к сожалению пока ни один из предложенных вариантов не работает.
Задача же не такая сложная.
Может сам $_POST иначе организовать?!
Может пытаться сгруппировать данные еще до отправки по post? Чтобы в $_POST['value1'] сразу были значения 1,2,3
в $_POST['value2'] сразу были значения 11,22,33
а в в $_POST['value3'] сразу были значения 111,222,333
Задача же не такая сложная.
Может сам $_POST иначе организовать?!
Может пытаться сгруппировать данные еще до отправки по post? Чтобы в $_POST['value1'] сразу были значения 1,2,3
в $_POST['value2'] сразу были значения 11,22,33
а в в $_POST['value3'] сразу были значения 111,222,333
Спустя 4 минуты, 19 секунд (24.01.2011 - 20:54) inpost написал(а):
myconstitution
и чем же мой вариант не подходит?
Считаем общий внутренности value = 7
теперь 7 раз, каждый раз перебираем, первый раз: [value1][0],[value2][0], второй раз: [value1][1], [value2][1] и т.д.
и чем же мой вариант не подходит?
Считаем общий внутренности value = 7
теперь 7 раз, каждый раз перебираем, первый раз: [value1][0],[value2][0], второй раз: [value1][1], [value2][1] и т.д.
Спустя 11 минут, 22 секунды (24.01.2011 - 21:06) myconstitution написал(а):
Уважаемый inpost,
Спасибо.
$x = count($_POST['value']['value1']) - 1; // поясните пожалуйста что здесь
//обозначает ключ ['value'] (его нет в $_POST)
for ($i=0; $i==$x; $i++) // здесь понятно (от 0 до макс ключа)
{
foreach($_POST['value'] as $k=>$v) // ключа ['value'] нет
{
echo $v[$i]; // здесь понятно, только вот как обращаться к ['value1'][0] и
//['value2'][0] по этому коду
}
}
Спасибо.
Спустя 2 минуты, 33 секунды (24.01.2011 - 21:08) inpost написал(а):
myconstitution
Нету, потому что я перед этим написал: Все value1,value2,value3 сгруппировать в общий массив value, а далее
Вот у тебя форма name="value1", а ты делаешь: name="value[value1]", тогда и появится, и всё будет понятно.
Нету, потому что я перед этим написал: Все value1,value2,value3 сгруппировать в общий массив value, а далее
Вот у тебя форма name="value1", а ты делаешь: name="value[value1]", тогда и появится, и всё будет понятно.
Спустя 5 минут, 42 секунды (24.01.2011 - 21:14) dima4321 написал(а):
я сделал так:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
$m=array('value1'=>array('1','7','2'),'value2'=>array('5','6','4'));
$k=0;
foreach($m as $value)
{
foreach($value as $n)
{
$k=$k.",".$n;
}
}
$k=explode(",",$k);
asort($k);
unset($k[0]);
foreach($k as $value)
{
echo $value.'<br>';
}
?>
Спустя 21 минута, 41 секунда (24.01.2011 - 21:36) fallow написал(а):
Э, пока думал уже понаписали)
Во я что нашаманил)
Во я что нашаманил)
<?php
$ar = array
(
'value1' => Array
(
0 => 1,
1 => 11,
2 => 111
),
'value2' => Array
(
0 => 2,
1 => 22,
2 => 222
),
'value3' => Array
(
0 => 3,
1 => 33,
2 => 333
)
);
function Bust($ar)
{
//вытаскиваем все ключи из первого вложенного массива
//(ну ты же сказал что их может быть больше 3-х)
//вытаскиваем самый большой, для ограничителя for'a
$max = max(array_keys($ar[key($ar)]));
for($i = 0; $i <= $max; $i++)
{
foreach($ar as $key => $val)
{
echo $val[$i].' | ';
}
echo '<br />';
}
}
Bust($ar); //вызываем и передаем массив
Спустя 26 минут, 15 секунд (24.01.2011 - 22:02) myconstitution написал(а):
fallow
Да, именно такая задумка и была.
Только полученные значения надо рассовать по переменным, дальше их использовать буду.
постараюсь пояснить:
Каждую тройку значений (value1,value2,value3) передаю в шаблон, чтобы заполнить 3 ячейки таблицы и вернуть это хозяйство в $tab .=
после чего отправляю в шаблон другую тройку значений с ключом ++, таким образом формируется заполненная html таблица. Она и является конечным результатом.
надеюсь понятно.
Да, именно такая задумка и была.
Только полученные значения надо рассовать по переменным, дальше их использовать буду.
$max = max(array_keys($_POST[key($_POST)]));
for($i = 0; $i <= $max; $i++)
{
foreach($_POST as $key => $val)
{
//если делать так, то в данном примере будет 3 раза по 3 значения)
//нужно 1 раз по три значения
$row['value1'] = $_POST['value1'][$i];
$row['value2'] = $_POST['value2'][$i];
$row['value3'] = $_POST['value3'][$i];
}
}
постараюсь пояснить:
Каждую тройку значений (value1,value2,value3) передаю в шаблон, чтобы заполнить 3 ячейки таблицы и вернуть это хозяйство в $tab .=
<tr><td><?php echo $tpl_value1; ?></td>
<td><?php echo $tpl_value2; ?></td>
<td><?php echo $tpl_value3; ?></td></tr>
после чего отправляю в шаблон другую тройку значений с ключом ++, таким образом формируется заполненная html таблица. Она и является конечным результатом.
надеюсь понятно.
Спустя 17 минут, 12 секунд (24.01.2011 - 22:19) inpost написал(а):
fallow
тоже самое, что и я, только в моем примере надо немножко ещё подумать =)
тоже самое, что и я, только в моем примере надо немножко ещё подумать =)
Спустя 5 минут, 31 секунда (24.01.2011 - 22:25) myconstitution написал(а):
inpost
Цитата |
fallow тоже самое, что и я, только в моем примере надо немножко ещё подумать =) |
согласен, идея одна и та же. Только здесь не приходится склеивать массивы. Выборка очевиднее. Однако, решения поставленной задачи в полной мере тоже не дает)
Спустя 47 минут, 43 секунды (24.01.2011 - 23:12) kovaldm написал(а):
myconstitution
А если в массиве $_POST будет больше вложенных массивов? Вручную переписывать?
А если в массиве $_POST будет больше вложенных массивов? Вручную переписывать?
Спустя 25 минут, 38 секунд (24.01.2011 - 23:38) myconstitution написал(а):
Итоговый вариант:
----
$max = max(array_keys($_POST[key($_POST)]));
for($i = 0; $i <= $max; $i++)
{
foreach($_POST as $key => $val)
{
$row[$i][$key] = $val[$i];
}
}
foreach ($row as $id => $val)
{
$ins['value1'] = $val['value1'];
$ins['value2'] = $val['value2'];
$ins['value3'] = $val['value3'];
}
----
Цитата |
А если в массиве $_POST будет больше вложенных массивов? Вручную переписывать? |
в моем примере количество вложенных массивов равно количеству ячеек таблицы(3).
спасибо всем за участие.
Спустя 21 минута, 20 секунд (24.01.2011 - 23:59) lovesa написал(а):
предполагаю такой код может отсортировать массив с любым содержанием ключей формата valueN
foreach($_POST as $key=>$value) {
if(preg_match('/value[\d]+/',$key)) {
foreach($value as $v)
$ret[strlen($v)][] = $v;
}
}
Спустя 4 минуты, 58 секунд (25.01.2011 - 00:04) kovaldm написал(а):
lovesa, а если ключи по другому обозвать?
Вот вам.
Вот вам.
$arr =
Array
(
'value1' => Array
(
0 => 1,
1 => 11,
2 => 111
),
'value2' => Array
(
0 => 2,
1 => 22,
2 => 222
),
'value3' => Array
(
0 => 3,
1 => 33,
2 => 333
)
);
while(true)
{
foreach($arr as &$v)
{
if($i = each($v))
echo $i[1] .'<br>';
else
{
$j = 1;
break;
}
}
if($j == 1)
break;
}