Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите объеденить массивы
Форумы портала PHP.SU » » Вопросы новичков » Помогите объеденить массивы

Страниц (1): [1]
 

1. KingStar - 19 Августа, 2011 - 15:20:35 - перейти к сообщению
Приветствую.

Вопрос в следующем.

имеется массивы

CODE (text):
скопировать код в буфер обмена
  1. [s1] => Array (
  2.                        [0]=> Audi
  3.                        [1] => BMW )
  4. [s2] => Array (
  5.                         [0] => Array
  6.                                 ( [0] => 100
  7.                                   [1] => 200 )
  8.                         [1]=> Array (
  9.                                   [2] => e36
  10.                                   [3] => e46 ) )
  11. [s3] => Array (
  12.                                   [2] => Array (
  13.                                              [0] => красный
  14.                                              [1] => черный )
  15.                                   [3] => Array (
  16.                                              [2] => синий
  17.                                              [3] => зеленый ) )



либо может кому проще будет вот так читать:
[s1] =>Array ( [0] => Audi [1] => BMW )
[s2] =>Array ( [0] => Array ( [0] => 100 [1] => 200 ) [1] => Array ( [2] => e36 [3] => e46 ) )
[s3] =>Array ( [2] => Array ( [0] => красный [1] => черный ) [3] => Array ( [2] => синий [3] => зеленый ) )

как их объеденить, чтобы на выходе получилисось так:

Audi - 100
Audi - 200
Бмв - e36 - красный
Бмв - e36 - черный
Бмв - e46 - синий
Бмв - e46 - зеленый


Пробовал вот так:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. foreach($_POST['s1'] as $v1=>$s1) {
  4.  
  5.         foreach($_POST['s2'][$v1] as $v2=>$s2) {
  6.  
  7.                    foreach($_POST['s3'][$v2] as $v3=>$s3) {
  8.        
  9.        
  10.         echo $s1." - ".$s2." - ".$s3."<br>";
  11.        
  12.                    }
  13.  
  14.         }
  15.        
  16. }
  17.                
  18.  


когда идет слияние второго с третьим, то он не обнаруживает ключей для массива Audi и выдает ошибку, и выводит только

Бмв - e36 - красный
Бмв - e36 - черный
Бмв - e46 - синий
Бмв - e46 - зеленый

Что делать??? как подставить чтоли пустые значения, или еще что сделать???


хелп
2. КЫР - 19 Августа, 2011 - 17:00:44 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. foreach ($s1 as $num=>$car)
  3. {
  4.    print $car.' - ';
  5.    foreach ($s2[$num] as $num2=>$type)
  6.    {
  7.        print $type.' - ';
  8.        foreach ($s3[$num2] as $num3=>$color)
  9.            print $color;
  10.    }
  11. }
  12.  


не проверял, но попробуй так
3. KingStar - 19 Августа, 2011 - 18:11:08 - перейти к сообщению
К сожалению не то, опять же когда не находить ключ - экранизируются ошибки, и на выходе получаем

BMW - e36 - красный - черный - e37 - синий - зеленый


Сейчас пробую вклеить проверку на наличие ключа с помощью array_key_exists, вроде получается, в скобках уже запутался =)))
4. KingStar - 20 Августа, 2011 - 03:30:26 - перейти к сообщению
Короче, сам решил проблему...

1. сканируем первый масив

PHP:
скопировать код в буфер обмена
  1. foreach($_POST['s1'] as $v1=>$s1) {


2. Проверяем наличие ключа во втором

PHP:
скопировать код в буфер обмена
  1. if(!array_key_exists($v1, $_POST['s2'])) {


3. Если нет ключа - вывод:

PHP:
скопировать код в буфер обмена
  1. echo $s1."<br>";


Вывод:
Honda

4. В противном случае продолжаем сканировать второй массив

PHP:
скопировать код в буфер обмена
  1. foreach($_POST['s2'][$v1] as $v2=>$s2) {


5. Снова проверяем наличие ключа в третьем

PHP:
скопировать код в буфер обмена
  1. if(!array_key_exists($v2, $_POST['s3'])) {



6. Если нет ключа - вывод:

PHP:
скопировать код в буфер обмена
  1. echo $s1." - ".$s2."<br>";


Вывод:
Audi - 100
Audi - 200


и т.д. неограниченное кол-во...


Итоговый вывод:
Honda
Audi - 100
Audi - 200
Бмв - e36 - красный
Бмв - e36 - черный
Бмв - e46 - синий
Бмв - e46 - зеленый

и т.д.

 

Powered by ExBB FM 1.0 RC1