Есть например массив такого вида:
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 Сам то чего нибудь пробовал сделать?
Спустя 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
.......
или вам не понятно где в коде оно формируется?
у нас должна сформироваться новая таблица, где ключи 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
.......
или вам не понятно где в коде оно формируется?