[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите преобразовать массив
arc-one
Помогите решить такую задачку, много времени потратил, пока не могу придумать нормальное решение...
Есть например массив такого вида:

Array (	
[
5] => Array ( //здесь в индексе хранится id таблицы
[33] => Array ( //здесь в индексе хранится id колонки
[35] => 25 //здесь в индексе хранится id строки
[37] => 27.5 )
[
34] => Array (
[
35] => 200
[37] => 220 ) )

[
9] => Array (
[
48] => Array (
[
5] => 80
[7] => 100
[9] => 120
) ) )


Нужно из него получить вот такой новый массив:

Array (
[
33] => Array (
[
id_tab] => 5
[arr_vals] => Array (
[
0] => 25
[1] => 27.5
[2] => 25
[3] => 27.5
[4] => 25
[5] => 27.5 ) )
[
34] => Array (
[
id_tab] => 5
[arr_vals] => Array (
[
0] => 200
[1] => 220
[2] => 200
[3] => 220
[4] => 200
[5] => 220) )
[
48] => Array (
[
id_tab] => 9
[arr_vals] => Array (
[
0] => 80
[1] => 80
[2] => 100
[3] => 100
[4] => 120
[5] => 120 ) ) )


Смысл в том, чтобы получить всевозможные комбинации значений строк между разными таблицами, количество таблиц может быть любое... Заранее спасибо)



Спустя 3 часа, 8 минут, 44 секунды (25.06.2012 - 17:55) walerus написал(а):
arc-one Сам то чего нибудь пробовал сделать? smile.gif

Спустя 2 часа, 31 минута, 1 секунда (25.06.2012 - 20:26) kovaldm написал(а):
Так надо массив преобразовать или получить всевозможные комбинации?

Спустя 1 час, 58 минут, 59 секунд (25.06.2012 - 22:25) arc-one написал(а):
Я то написал, но мне моя писанина вообще не нравится, уверен это можно красиво реализовать...





$arr=Array ('5' => array ( '33' => array ('35' => 25, '37' => 27.5 ) , '34' => Array ( '35' => 200, '37' => 220) ) , '9' => Array ( '48' => Array ('5' => 80, '7' => 100,'9' => 120) ) ) ;

print_r(arr_res($arr));

function arr_res($arr)
{
$arr_res=array();
$arr_vals_res=array();

$q=0;
$k=0;

foreach($arr as $ind1 => $v1){
$f=0;
foreach($v1 as $ind2 => $v2){
$a=0;
$arr_vals=array();
$b=0;
foreach($v2 as $ind3 => $v3){

if($q!=0){
for($i = 0;$i<=$k-1;$i++){
$arr_vals[$a]=$v3;
$a++;
}
}
else{$arr_vals[$b]=$v3;}
$b++;

}

$k=$b;
$f=$ind2;
$arr_res[$ind2]=array('id_tab'=>$ind1, 'arr_vals'=>$arr_vals);

}

foreach($arr_res as $ind5 => $v5){
$w=0;
$arr_temp=array();
if($ind5!=$f){
for($j=0;$j<=$k-1;$j++){
foreach($v5['arr_vals'] as $ind6 => $v6){

$arr_temp[$w]=$v6;
$w++;
}
}


$arr_vals_res[$ind5]['arr_vals']=$arr_temp;
}else{

$arr_vals_res[$ind5]['arr_vals']=$arr_res[$ind5]['arr_vals'];

}
$arr_vals_res[$ind5]['id_tab']=$arr_res[$ind5]['id_tab'];

}

$q++;
}
return $arr_vals_res;
}

Спустя 12 часов, 53 минуты, 28 секунд (26.06.2012 - 11:18) walerus написал(а):
Мне малость непонятно, дается это:
[33] => Array ( 		//здесь в индексе хранится id колонки
[35] => 25 //здесь в индексе хранится id строки
[37] => 27.5 )

Откуда получается это :
[arr_vals] => Array ( 
[
0] => 25
[1] => 27.5
[2] => 25
[3] => 27.5
[4] => 25
[5] => 27.5 )

Спустя 1 час, 9 минут, 1 секунда (26.06.2012 - 12:27) arc-one написал(а):
эти значения должны составляться таким образом, чтобы перебрать возможные комбинации только между таблицами 5 и 9, поскольку колонки 33 и 34 являются колонками таблицы 5 то их значения между собой мы не перебираем, а перебираем эти значениями только со значениями таблицы 9 :

у нас должна сформироваться новая таблица, где ключи 33, 34, 48 - это id колонок, а 0-5 - это id строк


0 - 25, 200, 80
1 - 27.5, 220, 80
2 - 25, 200, 100
3 - 27.5, 220, 100
.......

или вам не понятно где в коде оно формируется?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.