Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kahden arrayn yhdistäminen

BC1 [14.06.2011 21:50:42]

#

Kuinka te yhdistäisitte järkevästi kaksi monitasoista arrayta yhdeksi arrayksi. Kyseessä on koodaamani pikkusovelluksen ns. tilannekuvamuuttuja, jossa on erilaista tietoa prosessoinnin eri vaiheista.

Eli koodiesimerkkinä:

$muuttuja1 = array(
    "alkuperaiset" => array(
        "sijainti" => array(
            "alidomain" => "www",
            "domain" => "esimerkki.fi"
        )
    )
);

$muuttujaan1_lisaa = array(
    "alkuperaiset" => array(
        "sijainti" => array(
            "polku" => "polku/johonkin/sivuun"
        )
    )
);

$uusi_muuttuja = $muuttuja1 + $muuttujaan1_lisaa;

Noiden kahden taulukkomuuttujan yhdistämisestä (esim. plussan avulla) ei tule sellaista pakettia kuin haluaisin (alla mitä haluaisin). Lisäksi tuon jälkimmäisen pitäisi ylikirjoittaa aiempi arvo... Onnistuishan se jollain ketjulla läpikäyden, mutta eikö siitä tule turhaa käsittelyaikaa vaan lisää.

Summa summarum:

array(
    "alkuperaiset" => array(
        "sijainti" => array(
            "alidomain" => "www",
            "domain" => "esimerkki.fi",
            "polku" => "polku/johonkin/sivuun"
        )
    )
);

Eli kuinka te toteuttaisitte kyseisen niin, että se ei suotta rassaa serverin prosessoria?

-tossu- [14.06.2011 22:12:11]

#

Miten olisi funktio array_replace_recursive? Se tosin vaatii, että palvelimella on vähintään PHP 5.3.

Metabolix [15.06.2011 00:25:20]

#

Helppohan vastaava on itsekin toteuttaa.

function yhdista_ref(&$a, $b) {
    foreach ($b as $k => $v) {
        if (isset($a[$k]) && is_array($a[$k]) && is_array($v)) {
            yhdista_ref($a[$k], $v);
        } else {
            $a[$k] = $v;
        }
    }
}
function yhdista($a) {
    foreach (array_slice(func_get_args(), 1) as $b) {
        yhdista_ref($a, $b);
    }
    return $a;
}

// $summa_summarum = yhdista($muuttuja1, $muuttujaan1_lisaa);

BC1 [17.06.2011 13:38:05]

#

Aivan! array_replace_recursive on vastaus tuskaani. array_replace tuli kokeiltua, mutta en hoksannut tuota rekursiivista mallia. Kiitokset -tossu-'lle avusta!

Metabolix: Kieltämättä tuo näyttää helpolta ratkaisulta - ainakin siihen verrattuna, jota itse olin tekemässä... Toisinaan sitä ei vaan osaa ajatella riittävän yksinkertaisesti. Kiitos kuitenkin tästäkin vinkistä!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta