Преобразование массива.

ghost636

Новичок
Здравствуйте, помогите пожалуйста реализовать следующую задачу.
есть такой массив:
PHP:
$massiv1 = Array
(
    [0] => Array
        (
            [REP_REPTid] => 1
            [REPvalue] => 10000
            [orgname] => Яндекс
            [ORGid] => 1
            [PERSname] => Василий
        )

    [1] => Array
        (
            [REP_REPTid] => 2
            [REPvalue] => 50
            [orgname] => Яндекс
            [ORGid] => 1
            [PERSname] => Николай
        )

    [2] => Array
        (
            [REP_REPTid] => 1
            [REPvalue] => 7000
            [orgname] => Рамблер
            [ORGid] => 3
            [PERSname] => Василий
        )

    [3] => Array
        (
            [REP_REPTid] => 2
            [REPvalue] => 60
            [orgname] => Рамблер
            [ORGid] => 3
            [PERSname] => Жора
        )

    [4] => Array
        (
            [REP_REPTid] => 3
            [REPvalue] => 75
            [orgname] => Яндекс
            [ORGid] => 1
            [PERSname] => Гоги
        )
)
на деле может быть сотни ячеек первого уровня..., REP_REPTid = всегда от 1 до 4.

нужно преобразовать его в следующий вид:
PHP:
$massiv2 = Array
(
    [0] => Array
        (
            [orgname] => Яндекс
            [ORGid] => 1
            [REP_REPTid] => Array ( 
					[1] => Array ( 
							[REPvalue]=>10000
							[PERSname]=>Василий	
							)
					[2] => Array ( 
							[REPvalue]=>50
							[PERSname]=>Николай	
							)

					[3] => Array ( 
							[REPvalue]=>75
							[PERSname]=>Гоги	
							)
					[4] => Array ( 
							[REPvalue]=> null
							[PERSname]=> null
							)    
					)
        )

    [1] => Array
        (
            [orgname] => Рамблер
            [ORGid] => 3
            [REP_REPTid] => Array ( 
					[1] => Array ( 
							[REPvalue]=>7000
							[PERSname]=>Василий	
							)
					[2] => Array ( 
							[REPvalue]=>60
							[PERSname]=>Жора	
							)

					[3] => Array ( 
							[REPvalue]=> null
							[PERSname]=> null
							)
					[4] => Array ( 
							[REPvalue]=> null
							[PERSname]=> null
							)    
					)
        )
)
т.е. в элементе [REP_REPTid] должен всегда быть массив из четырех значений 1,2,3,4, каждый из которых имеет значение(REPvalue) и автора этого значения(PERSname), если в исходном массиве это отсутствует, то можно поставить нулл..
 

ghost636

Новичок
хотя в дальнейшем REP_REPTid может быть намного больше чем 4.. но по идее это всегда заранее известное число..
 

ghost636

Новичок
ну вот так получилось.. может кому пригодится..

PHP:
		// создаем массив ключами которого являются названия организаций, 
		for($i=0;$rep[$i];$i++){		
			$mass[$rep[$i][orgname]]=NULL;
		}
		// добавляем к массиву массв с названием и айди..
		foreach($rep as $key=>$value){
			foreach($mass as $k=>$val){
				if($value[orgname]==$k)
					$mass[$value[orgname]] = array("orgname"=>$value[orgname], "ORGid"=>$value[ORGid]);
			}
		}
		// добавляем к каждому массиву данные о параметрах..
		foreach($mass as $key=>$value){
			$mass[$key][REP_REPTid] = array();
			foreach($rep as $k=>$val){
				if($key==$rep[$k][orgname]){
					$temp=array('id'=>$rep[$k][REP_REPTid],'REPvalue'=>$rep[$k][REPvalue],'PERSname'=>$rep[$k][PERSname]);
					$mass[$key][REP_REPTid][$rep[$k][REP_REPTid]] =$temp;
				}				
			}
			
		}
разве что ключами в первом уровне выступают названия организаций..а желательней чтобы было 0,1,2.... может кто подскажет как переделать?
 

ghost636

Новичок
ключами в первом уровне выступают названия организаций..а желательней чтобы было 0,1,2.... может кто подскажет как переделать?
можно кончено так:
PHP:
		$i=0;
		foreach($mass as $key=>$value){
			$m[$i] = $value;
			$i++;
		}
но хотелось бы какнибудь по короче все это сделать.. не в четыре разные действия.. по красивее чтоли..)
 

hell0w0rd

Продвинутый новичок
ghost636
$i++ - постинкремент, так что можно засунуть в предыдущую строку:
PHP:
$m[$i++] = $value;
 

ghost636

Новичок
ухты.. я тут не один сам с собой разговариваю....

GusakovNick, спс, так и сделаю)
но вообще я имел ввиду в общем весь этот алгоритм, может быть както можно проще сделать.. почему-то он мне кажется сильно долгим.. хотя это уже не так уж и важно..
 

hell0w0rd

Продвинутый новичок
ухты.. я тут не один сам с собой разговариваю....

GusakovNick, спс, так и сделаю)
но вообще я имел ввиду в общем весь этот алгоритм, может быть както можно проще сделать.. почему-то он мне кажется сильно долгим.. хотя это уже не так уж и важно..
Я если честно не понял вообще по какому алгоритму ты сортируешь. И главное - зачем? Может можно сделать как-то удобнее:)
Посмотри array_map функцию, на пример)
 

niko42

Новичок
PHP:
foreach($massiv1 as $row=>$v){
    $v['REP_REPTid'] = array(
        'orgname' => $v['orgname'],
        'PERSname' => $v['PERSname']
    );
    unset($v['orgname']);
    unset($v['PERSname']);
}
Не пойму, зачем второй цикл?
 

ghost636

Новичок
мм... ну в общем вот какие массивы из всего это получаются:
вывожу как есть:
PHP:
Исходный: Array
(
    [0] => Array
        (
            [REP_REPTid] => 1
            [REPvalue] => 10000
            [orgname] => Яндекс
            [ORGid] => 1
            [PERSname] => Василий
            [REPdateUpdate] => 2013-04-18
            [REPtimeUpdate] => 01:23:00
        )

    [1] => Array
        (
            [REP_REPTid] => 2
            [REPvalue] => 50
            [orgname] => Яндекс
            [ORGid] => 1
            [PERSname] => 106
            [REPdateUpdate] => 2013-04-19
            [REPtimeUpdate] => 11:20:33
        )

    [2] => Array
        (
            [REP_REPTid] => 1
            [REPvalue] => 7000
            [orgname] => 102102
            [ORGid] => 3
            [PERSname] => Василий
            [REPdateUpdate] => 2013-04-19
            [REPtimeUpdate] => 00:00:00
        )

    [3] => Array
        (
            [REP_REPTid] => 2
            [REPvalue] => 60
            [orgname] => 102102
            [ORGid] => 3
            [PERSname] => Василий
            [REPdateUpdate] => 2013-04-19
            [REPtimeUpdate] => 00:00:00
        )

    [4] => Array
        (
            [REP_REPTid] => 3
            [REPvalue] => 75
            [orgname] => Яндекс
            [ORGid] => 1
            [PERSname] => 106
            [REPdateUpdate] => 2013-04-20
            [REPtimeUpdate] => 00:10:00
        )

    [5] => Array
        (
            [REP_REPTid] => 1
            [REPvalue] => 8000
            [orgname] => 103103
            [ORGid] => 4
            [PERSname] => Василий
            [REPdateUpdate] => 2013-04-20
            [REPtimeUpdate] => 17:43:07
        )

    [6] => Array
        (
            [REP_REPTid] => 4
            [REPvalue] => 2
            [orgname] => 103103
            [ORGid] => 4
            [PERSname] => Василий
            [REPdateUpdate] => 2013-04-20
            [REPtimeUpdate] => 17:43:07
        )

)
1: // создаем массив ключами которого являются названия организаций: Array
(
    [Яндекс] => 
    [102102] => 
    [103103] => 
)
2 // добавляем к массиву массв с названием и айди: Array
(
    [Яндекс] => Array
        (
            [orgname] => Яндекс
            [ORGid] => 1
        )

    [102102] => Array
        (
            [orgname] => 102102
            [ORGid] => 3
        )

    [103103] => Array
        (
            [orgname] => 103103
            [ORGid] => 4
        )

)
3 // добавляем к каждому массиву данные о параметрах: Array
(
    [Яндекс] => Array
        (
            [orgname] => Яндекс
            [ORGid] => 1
            [REP_REPTid] => Array
                (
                    [1] => Array
                        (
                            [id] => 1
                            [REPvalue] => 10000
                            [PERSname] => Василий
                            [REPdateUpdate] => 2013-04-18
                            [REPtimeUpdate] => 01:23:00
                        )

                    [2] => Array
                        (
                            [id] => 2
                            [REPvalue] => 50
                            [PERSname] => 106
                            [REPdateUpdate] => 2013-04-19
                            [REPtimeUpdate] => 11:20:33
                        )

                    [3] => Array
                        (
                            [id] => 3
                            [REPvalue] => 75
                            [PERSname] => 106
                            [REPdateUpdate] => 2013-04-20
                            [REPtimeUpdate] => 00:10:00
                        )

                )

        )

    [102102] => Array
        (
            [orgname] => 102102
            [ORGid] => 3
            [REP_REPTid] => Array
                (
                    [1] => Array
                        (
                            [id] => 1
                            [REPvalue] => 7000
                            [PERSname] => Василий
                            [REPdateUpdate] => 2013-04-19
                            [REPtimeUpdate] => 00:00:00
                        )

                    [2] => Array
                        (
                            [id] => 2
                            [REPvalue] => 60
                            [PERSname] => Василий
                            [REPdateUpdate] => 2013-04-19
                            [REPtimeUpdate] => 00:00:00
                        )

                )

        )

    [103103] => Array
        (
            [orgname] => 103103
            [ORGid] => 4
            [REP_REPTid] => Array
                (
                    [1] => Array
                        (
                            [id] => 1
                            [REPvalue] => 8000
                            [PERSname] => Василий
                            [REPdateUpdate] => 2013-04-20
                            [REPtimeUpdate] => 17:43:07
                        )

                    [4] => Array
                        (
                            [id] => 4
                            [REPvalue] => 2
                            [PERSname] => Василий
                            [REPdateUpdate] => 2013-04-20
                            [REPtimeUpdate] => 17:43:07
                        )

                )

        )

)
4: изменяем первичные ключи Array
(
    [0] => Array
        (
            [orgname] => Яндекс
            [ORGid] => 1
            [REP_REPTid] => Array
                (
                    [1] => Array
                        (
                            [id] => 1
                            [REPvalue] => 10000
                            [PERSname] => Василий
                            [REPdateUpdate] => 2013-04-18
                            [REPtimeUpdate] => 01:23:00
                        )

                    [2] => Array
                        (
                            [id] => 2
                            [REPvalue] => 50
                            [PERSname] => 106
                            [REPdateUpdate] => 2013-04-19
                            [REPtimeUpdate] => 11:20:33
                        )

                    [3] => Array
                        (
                            [id] => 3
                            [REPvalue] => 75
                            [PERSname] => 106
                            [REPdateUpdate] => 2013-04-20
                            [REPtimeUpdate] => 00:10:00
                        )

                )

        )

    [1] => Array
        (
            [orgname] => 102102
            [ORGid] => 3
            [REP_REPTid] => Array
                (
                    [1] => Array
                        (
                            [id] => 1
                            [REPvalue] => 7000
                            [PERSname] => Василий
                            [REPdateUpdate] => 2013-04-19
                            [REPtimeUpdate] => 00:00:00
                        )

                    [2] => Array
                        (
                            [id] => 2
                            [REPvalue] => 60
                            [PERSname] => Василий
                            [REPdateUpdate] => 2013-04-19
                            [REPtimeUpdate] => 00:00:00
                        )

                )

        )

    [2] => Array
        (
            [orgname] => 103103
            [ORGid] => 4
            [REP_REPTid] => Array
                (
                    [1] => Array
                        (
                            [id] => 1
                            [REPvalue] => 8000
                            [PERSname] => Василий
                            [REPdateUpdate] => 2013-04-20
                            [REPtimeUpdate] => 17:43:07
                        )

                    [4] => Array
                        (
                            [id] => 4
                            [REPvalue] => 2
                            [PERSname] => Василий
                            [REPdateUpdate] => 2013-04-20
                            [REPtimeUpdate] => 17:43:07
                        )

                )

        )

)
 

ghost636

Новичок
Посмотри array_map функцию, на пример)
посмотрел.. может быть она бы и подошла, но как-то сложновато пока для меня...)

.. И главное - зачем?
ну это мне для дальнейшего вывода. нужно построить табличку вот такого вида:
1111.JPG, где ЧДД ВВИ ВНД СО - названия параметров, определяются по айди.. правда они (именно для заголовка ячеек таблицы) сейчас выводятся из другого запроса..другим циклом,
и чтобы вставить в хтмл разметку таблицы данные о параметрах я использую вот такую подстановку: в цикле
PHP:
<? foreach(МАССИВ_ПОЛУЧЕННЫЙ_В_ПРЕД.ПОСТЕ as $key=>$value) : ?>
<tr>
<td><?=$value[REP_REPTid][1][REPvalue];?></td>
<td><?=$value[REP_REPTid][2][REPvalue];?></td>
<td><?=$value[REP_REPTid][3][REPvalue];?></td>
<td><?=$value[REP_REPTid][4][REPvalue];?></td>
</tr>
<? endforeach; ?>
с четырьмя параметрами то норм.. только вот если их будет не 4 а больше.. и если понадобится выводить нужные по запросу.. не представляю как тогда табличку разметить..
 
Сверху