| 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: 12 let
|
|||
0