Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Объединим пару массивов
 
 автор: reimax   (22.06.2012 в 10:57)   письмо автору
 
 

Здравствуйте,

Задача такая. Есть 2 массива. В одном значения параметра 1, во втором значения параметра 2. Их нужно объединить, чтобы построить таблицу, в которой бы оказались по x параметр 1, по y параметр 2. думал на array_merge, но он просто сливает вместе два массива...

спасибо.

  Ответить  
 
 автор: confirm   (22.06.2012 в 11:28)   письмо автору
 
   для: reimax   (22.06.2012 в 10:57)
 

Покажите исходные массивы (пример) и какой в итоге вы ожидаете.

  Ответить  
 
 автор: reimax   (22.06.2012 в 11:51)   письмо автору
 
   для: confirm   (22.06.2012 в 11:28)
 

$ar1 = array(0=>"синий"; 1=>"белый";2=>"красный");
$ar2 = array(0=>"10"; 1=>"15";2=>"20");

на выходе квадрат 3х3 по x один массив, по y второй. А вот в пересечениях клеток как то нужно получить значения этих массивов. Вообще реально такое?

  Ответить  
 
 автор: confirm   (22.06.2012 в 11:59)   письмо автору
 
   для: reimax   (22.06.2012 в 11:51)
 

То есть - в ячейках должно быть типа "синий 10", "синий 15"... и т.п.?

  Ответить  
 
 автор: reimax   (22.06.2012 в 12:06)   письмо автору
 
   для: confirm   (22.06.2012 в 11:59)
 

да

  Ответить  
 
 автор: Lotanaen   (22.06.2012 в 11:54)   письмо автору
 
   для: reimax   (22.06.2012 в 10:57)
 

может быть таким образом?

$result = array();
foreach ($array1 as $key=>$value) {

       $result[$key]['x'] = $value;
       $result[$key]['y'] = $array2[$key];
}

  Ответить  
 
 автор: reimax   (22.06.2012 в 12:50)   письмо автору
 
   для: 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 см


по строкам

  Ответить  
 
 автор: Valick   (22.06.2012 в 13:03)   письмо автору
 
   для: reimax   (22.06.2012 в 12:50)
 

откуда вы получаете этот массив? если из базы то возможно вы движетесь в неправильном направлении

  Ответить  
 
 автор: reimax   (22.06.2012 в 13:16)   письмо автору
 
   для: Valick   (22.06.2012 в 13:03)
 

да, с базы. структура такая:

type 1 - первый параметр
type 2 - второй параметр

Id
param_type
param_name

  Ответить  
 
 автор: Valick   (22.06.2012 в 15:00)   письмо автору
 
   для: reimax   (22.06.2012 в 13:16)
 

SELECT * FROM
(SELECT param_type FROM `table`) t1,
(SELECT param_name FROM `table`) t2

попробуйте запрос такого вида и посмотрите что получится

  Ответить  
 
 автор: confirm   (22.06.2012 в 14:12)   письмо автору
 
   для: reimax   (22.06.2012 в 12:50)
 

Ответили да, а на самом деле пишите иное. 3х3 - это девять значений, а у вас массив содержит значений всего 4-х координат.
Собственно, если говорить отвлеченно, то шахматную доску можно представить ни как систему координат, а как нумерованные ячейки. То есть, если говорить о массивах, то это будет одномерный массив, а разбить таковой на части, на вложенные массивы отражающие и координаты и их значение очень просто, как просто и произвести обратное действие.
Это я к тому, что может изначально поступить не так?

Так какой массив в итоге должен быть? Сперва об этом, а потом Smarty.

  Ответить  
 
 автор: reimax   (22.06.2012 в 14:23)   письмо автору
 
   для: confirm   (22.06.2012 в 14:12)
 

да, 9 значений, как шахматная доска.

  Ответить  
 
 автор: confirm   (22.06.2012 в 14:33)   письмо автору
 
   для: reimax   (22.06.2012 в 14:23)
 

И где они эти 9 значений в том массиве, который вы привели? У вас ведь каждый выложенный массив, это две координаты, итого сколько значений будет, если вложений всего 4? Или вы считаете ID, которые непонятно откуда взялись?

  Ответить  
 
 автор: reimax   (22.06.2012 в 14:40)   письмо автору
 
   для: confirm   (22.06.2012 в 14:33)
 

я просто пытаюсь построить квадрат из этих значений. Я пытался решить вопрос с двумя координатами, но, как видно не удалось. Никаких id нет.

  Ответить  
 
 автор: Lotanaen   (22.06.2012 в 15:26)   письмо автору
 
   для: 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>";

  Ответить  
 
 автор: confirm   (22.06.2012 в 16:11)   письмо автору
 
   для: reimax   (22.06.2012 в 14:40)
 

Если говорить об изначальном, чего вы писали, то:
<?
$ar1 
= array("синий""белый""красный");
$ar2 = array(101520);
$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($arr3);
print_r($arr);

Совсем не обязательно иметь многомерный массив, чтобы построить в Smarty таблицу. Вы можете получать в шаблонизаторе текущую итерацию цикла, и деля ее по модулю 3, знать, что нужно закрыть строку таблицы и открыть новую.

PS. Элементы массива разделяются запятыми, а не точкой с запятой как у вас.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования