[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: перебор массива
myconstitution
Всем доброго вечера.


Подскажите как перебрать массив так, чтобы выбрать сначала значения:
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].


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

Спустя 4 минуты, 19 секунд (24.01.2011 - 20:54) inpost написал(а):
myconstitution
и чем же мой вариант не подходит?
Считаем общий внутренности 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]", тогда и появится, и всё будет понятно.

Спустя 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
Да, именно такая задумка и была.
Только полученные значения надо рассовать по переменным, дальше их использовать буду.

	$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 будет больше вложенных массивов? Вручную переписывать?

Спустя 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;
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.