|
|
|
| Здравствуйте,
Задача такая. Есть 2 массива. В одном значения параметра 1, во втором значения параметра 2. Их нужно объединить, чтобы построить таблицу, в которой бы оказались по x параметр 1, по y параметр 2. думал на array_merge, но он просто сливает вместе два массива...
спасибо. | |
|
|
|
|
|
|
|
для: reimax
(22.06.2012 в 10:57)
| | Покажите исходные массивы (пример) и какой в итоге вы ожидаете. | |
|
|
|
|
|
|
|
для: confirm
(22.06.2012 в 11:28)
| | $ar1 = array(0=>"синий"; 1=>"белый";2=>"красный");
$ar2 = array(0=>"10"; 1=>"15";2=>"20");
на выходе квадрат 3х3 по x один массив, по y второй. А вот в пересечениях клеток как то нужно получить значения этих массивов. Вообще реально такое? | |
|
|
|
|
|
|
|
для: reimax
(22.06.2012 в 11:51)
| | То есть - в ячейках должно быть типа "синий 10", "синий 15"... и т.п.? | |
|
|
|
|
|
|
|
для: confirm
(22.06.2012 в 11:59)
| | да | |
|
|
|
|
|
|
|
для: reimax
(22.06.2012 в 10:57)
| | может быть таким образом?
$result = array();
foreach ($array1 as $key=>$value) {
$result[$key]['x'] = $value;
$result[$key]['y'] = $array2[$key];
}
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(22.06.2012 в 11:54)
| | да, нужна была такая группировка, сейчас массив получился таким:
Array
(
[0] => Array
(
[x] => stdClass Object
(
[Id] => 1
[param_type] => 1
[param_name] => синий
)
[y] => stdClass Object
(
[Id] => 5
[param_type] => 2
[param_name] => 10 см
)
)
[1] => Array
(
[x] => stdClass Object
(
[Id] => 2
[param_type] => 1
[param_name] => красный
)
[y] => stdClass Object
(
[Id] => 6
[param_type] => 2
[param_name] => 15 см
)
)
[2] => Array
(
[x] => stdClass Object
(
[Id] => 3
[param_type] => 1
[param_name] => черный
)
[y] => stdClass Object
(
[Id] => 7
[param_type] => 2
[param_name] => 20 см
)
)
[3] => Array
(
[x] => stdClass Object
(
[Id] => 4
[param_type] => 1
[param_name] => зеленый
)
[y] => stdClass Object
(
[Id] => 8
[param_type] => 2
[param_name] => 25 см
)
)
)
|
а как перевести их в таблицу? я делаю так:
<table style="border:1px solid red;">
{foreach from=$result item=res}
{if $res.x->param_type == 1}<tr>{/if}
{if $res.y->param_type == 2}<td style="border:1px solid red;">{/if}
{$res.x->param_name}
{$res.y->param_name}
{if $res.y->param_type == 2}</td>{/if}
{if $res.x->param_type == 1}</tr>{/if}
{/foreach}
</table>
|
результат,
синий10 см
красный15 см
черный20 см
зеленый25 см
|
по строкам | |
|
|
|
|
|
|
|
для: reimax
(22.06.2012 в 12:50)
| | откуда вы получаете этот массив? если из базы то возможно вы движетесь в неправильном направлении | |
|
|
|
|
|
|
|
для: Valick
(22.06.2012 в 13:03)
| | да, с базы. структура такая:
type 1 - первый параметр
type 2 - второй параметр
Id
param_type
param_name | |
|
|
|
|
|
|
|
для: reimax
(22.06.2012 в 13:16)
| | SELECT * FROM
(SELECT param_type FROM `table`) t1,
(SELECT param_name FROM `table`) t2
попробуйте запрос такого вида и посмотрите что получится | |
|
|
|
|
|
|
|
для: reimax
(22.06.2012 в 12:50)
| | Ответили да, а на самом деле пишите иное. 3х3 - это девять значений, а у вас массив содержит значений всего 4-х координат.
Собственно, если говорить отвлеченно, то шахматную доску можно представить ни как систему координат, а как нумерованные ячейки. То есть, если говорить о массивах, то это будет одномерный массив, а разбить таковой на части, на вложенные массивы отражающие и координаты и их значение очень просто, как просто и произвести обратное действие.
Это я к тому, что может изначально поступить не так?
Так какой массив в итоге должен быть? Сперва об этом, а потом Smarty. | |
|
|
|
|
|
|
|
для: confirm
(22.06.2012 в 14:12)
| | да, 9 значений, как шахматная доска. | |
|
|
|
|
|
|
|
для: reimax
(22.06.2012 в 14:23)
| | И где они эти 9 значений в том массиве, который вы привели? У вас ведь каждый выложенный массив, это две координаты, итого сколько значений будет, если вложений всего 4? Или вы считаете ID, которые непонятно откуда взялись? | |
|
|
|
|
|
|
|
для: confirm
(22.06.2012 в 14:33)
| | я просто пытаюсь построить квадрат из этих значений. Я пытался решить вопрос с двумя координатами, но, как видно не удалось. Никаких id нет. | |
|
|
|
|
|
|
|
для: reimax
(22.06.2012 в 14:40)
| |
echo "<table>";
foreach ($arr1 as $key+>$value) {
echo "<tr>";
foreach ($arr2 as $key2=>$value2)
echo "<td>".$value."-".$value2;
echo "</tr>";
}
echo "</table>";
|
| |
|
|
|
|
|
|
|
для: reimax
(22.06.2012 в 14:40)
| | Если говорить об изначальном, чего вы писали, то:
<?
$ar1 = array("синий", "белый", "красный");
$ar2 = array(10, 15, 20);
$arr = '';
foreach($ar2 as $v) $arr .= implode(' '.$v.',', $ar1).' '.$v.',';
//это одномерный массив, которого вполне хватит для Smarty
$arr = explode(',',rtrim($arr,','));
echo '<pre>';
print_r($arr);
//если надо именно 3 х 3, то
$arr = array_chunk($arr, 3);
print_r($arr);
|
Совсем не обязательно иметь многомерный массив, чтобы построить в Smarty таблицу. Вы можете получать в шаблонизаторе текущую итерацию цикла, и деля ее по модулю 3, знать, что нужно закрыть строку таблицы и открыть новую.
PS. Элементы массива разделяются запятыми, а не точкой с запятой как у вас. | |
|
|
|