Zadejte hledaný výraz...

Pomoc s dvourozmernym polem v PHP

David Musil
verified
rating uzivatele
(69 hodnocení)
21. 10. 2015 16:25:33
Ahoj,
muzete me prosim nekdo nakopnout a poradit?
Mam dvourozmerne pole a potrebuji z nej vytahnout pouze hodnoty, ktere se nachazi ve vsech polich druhych rozmeru. Tzn, mam pole:
poleCele(
poleA = (1,2,3)
poleB = (2,4,5)
poleC = (2,6,7)
)
A ja potrebuji postupne projit pole A a zjistit, jestli se kazda vybrana hodnota z poleA nachazi i v poli B a poli C. V pripade ze nenachazi, tak ji chci z pole A smazat. Dulezitou poznamkou jeste je, ze predem nevim pocet poli druhych rozmeru. Nekdy to tedy muze byt napr. A az D, nekdy A az M.
Tady by tedy melo byt vysledkem, ze v poliA zustane pouze prvek "2", protoze ten se nachazi jak v poliB tak v poliC.
Dokazete me nekdo nakopnout? Zatim vsechny pokusy vedou marne k zacykleni :/
Diky moc.
21. 10. 2015 16:25:33
https://webtrh.cz/diskuse/pomoc-s-dvourozmernym-polem-v-php#reply1147824
Bacon
verified
rating uzivatele
(2 hodnocení)
21. 10. 2015 16:45:45
Co funkce array_intersect()?
21. 10. 2015 16:45:45
https://webtrh.cz/diskuse/pomoc-s-dvourozmernym-polem-v-php#reply1147823
David Musil
verified
rating uzivatele
(69 hodnocení)
21. 10. 2015 16:47:11
Napsal Bacon;1234795
Co funkce array_intersect()?
Sakra, to je dobry! Diky Bacone.
Ted uz jenom do toho zaimplementovat tu situaci, ze nevim, kolik poli budu porovnavat.
21. 10. 2015 16:47:11
https://webtrh.cz/diskuse/pomoc-s-dvourozmernym-polem-v-php#reply1147822
Bacon
verified
rating uzivatele
(2 hodnocení)
21. 10. 2015 16:55:52
Nevím, jak je to aktuální (10 let starý komentář na php.net), ale někdo tam píše toto:
21. 10. 2015 16:55:52
https://webtrh.cz/diskuse/pomoc-s-dvourozmernym-polem-v-php#reply1147821
David Musil
verified
rating uzivatele
(69 hodnocení)
21. 10. 2015 17:10:39
Kdyz tam ty pole opravdu napisu, tak to funguje (viz. uzkazka), ale kdyz misto $array dosadim mnou vytvorene vicerozmerne pole, tak se tomu nechce..
21. 10. 2015 17:10:39
https://webtrh.cz/diskuse/pomoc-s-dvourozmernym-polem-v-php#reply1147820
David Musil
verified
rating uzivatele
(69 hodnocení)
21. 10. 2015 17:28:49
Uz jsem doma, chybka byla jinde.
21. 10. 2015 17:28:49
https://webtrh.cz/diskuse/pomoc-s-dvourozmernym-polem-v-php#reply1147819
Použit array_intersect() je jedno řešení. Pokud to pole je velké, bude efektivnější přehodit pole na hashmapy a použít array_intersect_key(). Zrychlení může být i více než desetinásobné.
Mohlo by to vypadat takto (pro PHP 5.6):
$ar = ,
,
,
];
var_dump(findCommonMembers(...$ar));
/**
* Find all members from the source that are present in other groups
*
* @param array $source
* @param ...$groups
*
* @return array All common members
*/
function findCommonMembers(array $source, ...$groups)
{
$hashmap = arrayTohashmap($source);
$filteredHashmap = array_reduce($groups, function ($hashmap, $group) {
$groupHashmap = arrayTohashmap($group);
return array_intersect_key($hashmap, $groupHashmap);
}, $hashmap);
$commonMembers = array_keys($filteredHashmap);
return $commonMembers;
}
/**
* Create a hashmap from the given array
*
* Array values become keys, the value is `true` everywhere.
*
*
* becomes
*
*
* @param array $array
*
* @return array
*/
function arrayToHashmap(array $array)
{
return array_fill_keys($array, true);
}
21. 10. 2015 22:02:08
https://webtrh.cz/diskuse/pomoc-s-dvourozmernym-polem-v-php#reply1147818
Pro odpověď se přihlašte.
Přihlásit