Autor | Zpráva | ||
---|---|---|---|
Enko Profil |
#1 · Zasláno: 17. 6. 2014, 17:06:50
Ahoj,
hledám způsob jak ze dvou polí udělat jedno, sloučením na základě stejných hodnot v obsahu pole, které jsou stejné v obou dvou. Příklad: Mám pole 1 [login] => jmeno.prijmeni [unit] => Array ( [0] => Hodnota1 [1] => hodnota2 ) pole 2 [login] => Hodnota1 [description] => Description A chci aby byl výsledek stejný jako například při JOINování SQL tabulek, kdy spojím tabulky na základě společných hodnot z konkrétních sloupců. Například takto: Nové pole [login] => jmeno.prijmeni [unit] => Array ( [0] => Hodnota1 ) [description] => Description Je už na to nějaká vhodná funkce? Děkuji |
||
Tabetha Profil |
#2 · Zasláno: 17. 6. 2014, 17:31:58
$a1 = array( "login" => "neco", "unit" => array( "hodnota1", "hodnota2" ) ); $a2 = array( "login" => "hodnota1", "description" => "popis1" ); $a3 = array( "login" => "neco", "unit" => array( "hodnota1" ), "description" => "popis1" ); chceš docieliť aby to vyzeralo takto? |
||
Enko Profil |
#3 · Zasláno: 17. 6. 2014, 17:37:26
Ano, přesně takto.
|
||
Tabetha Profil |
#4 · Zasláno: 19. 6. 2014, 11:21:42
nemal som čas, ale dneska skúsim na to pozrieť. (sťahovanie je hrôza) :) keby niečo, tak skype eodenko ;)
|
||
juriad Profil |
#5 · Zasláno: 19. 6. 2014, 15:53:17
<?php function array_join($left, $right, $condition) { $result = array(); list($lcol, $rcol) = $condition; foreach ($left as $lrow) { $ll = $lrow[$lcol]; if (is_null($ll)) { continue; } else if (is_scalar($ll)) { $ll = array($ll); } else if (is_array($ll)) { # nothing } else { die ('Wrong type in left'); } foreach ($right as $rrow) { $rr = $rrow[$rcol]; if (is_null($rr)) { continue; } else if (is_scalar($rr)) { $rr = array($rr); } else if (is_array($rr)) { # nothing } else { die ('Wrong type in right'); } foreach ($ll as $l) { foreach ($rr as $r) { if ($l == $r) { $res = array(); foreach ($lrow as $k => $v) { if ($lcol == $k) { continue; } $res[$k] = $v; } foreach ($rrow as $k => $v) { if ($rcol == $k) { continue; } $res[$k] = $v; } $res[$lcol] = $res[$rcol] = $l; $result[] = $res; } } } } } return $result; } $a1 = array( "login" => "neco", "unit" => array( "hodnota1", "hodnota2" ) ); $a2 = array( "login" => "hodnota1", "description" => "popis1" ); var_dump(array_join(array($a1), array($a2), array("unit", "login"))); array(1) { [0]=> array(3) { ["login"]=> string(8) "hodnota1" ["description"]=> string(6) "popis1" ["unit"]=> string(8) "hodnota1" } } Něco jsem nastřelil. V SQL řádek nesmí obsahovat pole, ale pokusil jsem se to nějak rozumně implementovat; trochu se liší od toho tvého, protože mi to přijde nekonzistentní. Moje funkce joinuje tabulky, ne jen řádky, to je důvod, proč ve výsledeku je o jedno pole více. V případě, že sloupce, podle kterých se joinuje obsahují pole, tak se prostě zkusí všechny možnosti. |
||
Časová prodleva: 19 dní
|
|||
Enko Profil |
#6 · Zasláno: 8. 7. 2014, 11:53:14
Ano, děkuji :-)
|
||
Časová prodleva: 11 let
|
0