Съединяване на масиви

Galli

Registered
От два масива искам да направя 3-ти.
От $arr1 и $arr2 как може да стане $arr3.
Индексите на $arr1 отговарят на стойността на p_id от $arr2.
Ето ги като php код.
Код:
echo '<pre>';
/*******************************/
$arr1 = Array
    (
    1 => 'mimi',
    2 => 'atanas',
    4 => 'angel',
    6 => 'vera',
    7 => 'ivan',
);
/*******************************/
$arr2 = Array
    (
    0 => Array
        (
        'id' => 1,
        'p_id' => 1,
        'cvqt' => 'bql',
    ),
    1 => Array
        (
        'id' => 2,
        'p_id' => 1,
        'cvqt' => 'zelen',
    ),
    2 => Array
        (
        'id' => 3,
        'p_id' => 6,
        'cvqt' => 'jylt',
    ),
    3 => Array
        (
        'id' => 4,
        'p_id' => 6,
        'cvqt' => '4eren',
    ),
    4 => Array
        (
        'id' => 5,
        'p_id' => 6,
        'cvqt' => 'bql',
    ),
);
/*********************************/
$arr3 = Array
(
    1 => Array(
        1 => 'bql',
        2 => 'zelen',
    ),
    6 => Array(
        3 => 'vylt',
        4 => '4eren',
        5 => 'bql',
    ), 
);
/*************************************/
print_r($arr1);
print_r($arr2);
print_r($arr3);
Пробвах някои неща, но нещо се пообърках.
 
PHP:
foreach($arr2 as $k => $v)
{
	$arr2[$k]['p_name'] = $arr1[$v['p_id']];
}

Нещо такова? С функциите, които php предлага за работа с масиви мисля, че няма да се получи.
 
miro_94 и аз така мислех, но взима само първия елемент. Пробвах и с една if проверка в цикъла, но го обърках нещо. Може би като се наспя ще го измисля. :?
 
Galli каза:
miro_94 и аз така мислех, но взима само първия елемент. Пробвах и с една if проверка в цикъла, но го обърках нещо. Може би като се наспя ще го измисля. :?
Как така взима само първия елемент? Ето какъв резултат ми дава като пусна скрипта при мен.
Array
(
[0] => Array
(
[id] => 1
[p_id] => 1
[cvqt] => bql
[p_name] => mimi
)

[1] => Array
(
[id] => 2
[p_id] => 1
[cvqt] => zelen
[p_name] => mimi
)

[2] => Array
(
[id] => 3
[p_id] => 6
[cvqt] => jylt
[p_name] => vera
)

[3] => Array
(
[id] => 4
[p_id] => 6
[cvqt] => 4eren
[p_name] => vera
)

[4] => Array
(
[id] => 5
[p_id] => 6
[cvqt] => bql
[p_name] => vera
)

)
 
Аз за моите проби говорих. Твоят го видях, но той изобщо не прилича на това, което се опитвам да сглобя. Сигурно не си погледнал какво вади $arr3. Ето го.
Код:
Array
(
    [1] => Array
        (
            [1] => bql
            [2] => zelen
        )
    [6] => Array
        (
            [3] => vylt
            [4] => 4eren
            [5] => bql
        )
)
 
Galli каза:
Аз за моите проби говорих. Твоят го видях, но той изобщо не прилича на това, което се опитвам да сглобя. Сигурно не си погледнал какво вади $arr3. Ето го.
Код:
Array
(
    [1] => Array
        (
            [1] => bql
            [2] => zelen
        )
    [6] => Array
        (
            [3] => vylt
            [4] => 4eren
            [5] => bql
        )
)
PHP:
$arr3 = array();

foreach($arr1 as $k => $v)
{
	foreach($arr2 as $key => $val)
	{
		if($val['p_id'] == $k)
		{
			$arr3[$k][$key] = $val['cvqt'];
		}
	}
}

Това трябва да е :lol:

Array
(
[1] => Array
(
[0] => bql
[1] => zelen
)

[6] => Array
(
[2] => jylt
[3] => 4eren
[4] => bql
)

)
 
Да така прилича, но не съвсем.
Array
(
[1] => Array
(
[0] => bql
[1] => zelen
)

[6] => Array
(
[2] => jylt
[3] => 4eren
[4] => bql
)
)
Това в червено се разминава и трябва да са стойностите на id от $arr2. Случило се е, че са поредни, но те може и да не са 1 2 3 4 5 и т.н.
Тези два масива се получават от две заявки към таблици.
Код:
CREATE TABLE IF NOT EXISTS `person` (
  `id` int(255) unsigned NOT NULL AUTO_INCREMENT,
  `ime` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `person` (`id`, `ime`) VALUES
(1, 'mimi'),
(2, 'atanas'),
(4, 'angel'),
(6, 'vera'),
(7, 'ivan');
Код:
CREATE TABLE IF NOT EXISTS `opt` (
  `id` int(255) unsigned NOT NULL AUTO_INCREMENT,
  `p_id` int(255) unsigned NOT NULL,
  `cvqt` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `opt` (`id`, `p_id`, `cvqt`) VALUES
(1, 1, 'bql'),
(2, 1, 'zelen'),
(3, 6, 'jylt'),
(4, 6, '4eren'),
(5, 6, 'bql'),
(6, 11, 'lila');

Аз не бях включил втори foreach, може би ще успея да го донаглася с твоя код.
 
Ето го с id-то
PHP:
$arr3 = array();

foreach($arr1 as $k => $v)
{
	foreach($arr2 as $key => $val)
	{
		if($val['p_id'] == $k)
		{
			$arr3[$k][$val['id']] = $val['cvqt'];
		}
	}
}
 

Горе