arrays samenvoegen, ontdubbelen en sorteren
Dit is de gebruikte php:
$out = preg_split('/<.*?>/', $string);
print_r ($out);
Dit is nu het resultaat:
Array (
[0] => Harold
[1] => Pete
[2] => John
[3] =>
)
Array (
[0] => Charles
[1] => Joan
[2] => Kate
[3] => Pete
[4] =>
)
Array (
[0] => Tim
[1] => Alex
[2] => Kate
[3] =>
)
Dit is wat het moet worden:
Array (
[0] => Alex
[1] => Charles
[2] => Harold
[3] => Joan
[4] => John
[5] => Kate
[6] => Pete
[7] => Tim
[8] => John
)
Ik heb verschillende dingen geprobeerd, maar kom er niet uit.
http://php.net/manual/en/function.array-merge.php en daar staat ook dat je iets kunt doen als:
$a=array(...);
$b=array(...);
$totaal = $a+$b;
Voor het uniek maken heb je array_unique().
maar ik ben wel genieuwd naar waar je dit voor gebruikt, in de originele string staat blijkbaar iets als <aap><noot><mies> ofzo?
Arrays kun je gewoon bij elkaar optellen: $a=array(...);
$b=array(...);
$totaal = $a+$b;
Voor het uniek maken heb je array_unique().
maar ik ben wel genieuwd naar waar je dit voor gebruikt, in de originele string staat blijkbaar iets als <aap><noot><mies> ofzo?
Bovenstaande kan ik niet proberen omdat de string het resultaat van een query is en een paar honderd arrays oplevert. Die kan ik niet op bovenstaande manier verwerken. De query doorzoekt + 10.000 items waar in een gegeven veld de tekst 'body' voorkomt en als resultaat de tekst uit een ander veld retourneert.
Dit is dan de uitkomst: http://allaboutheaven.org/string
Die moet ik dan nog ontdubbelen, sorteren en automatisch van een link voorzien naar de betreffende pagina.
Je zoekt naar een woord in een kolom X en je krijgt een setje woorden terug uit kolom Y, en die wil je samenvoegen tot een lijst van unieke woorden?
Dan kun je de uitkomst van de query sowieso al aan elkaar plakken voordat je de split doet, dan heb je nog maar één string en dus ook één array.
Maar als het echt zo in je database staat dan zou ik dat sowieso als eerste veranderen door een aparte tabel te maken met de unieke woorden en een koppeltabel die elk van de 10.000 items koppelt aan alle woorden die ze bevatten. Dat zijn heel veel koppelingen, maar kan de database sneller mee over weg dan PHP de strings kan splitten.
EDIT: ik lees nu pas het stuk over de link, hoe wil je dat doen als je unieke woorden hebt en dus geen verwijzing naar alle pagina's meer *kunt* maken?
Gewijzigd op 27/10/2016 15:33:38 door Pg Vincent
Hier zie je het resultaat zonder die ontdubbeling (er is nog een extra Jquery voor de alfabetisering): http://allaboutheaven.org/out-of-body-test
Hiervoor heb ik gebruikt:
{if count($items) > 20}
<div id="outlist-nav" style="margin-top:14px;"></div>
<ul id="outlist" class="observationslist" style="margin-top:16px;margin-left:-24px;">
{else}
<ul id="outlist" class="observationslist" style="margin-left:-28px;">
{/if}
{sort data=$items}
{foreach from=$sorted item=item}
{$item->type assign="type"}
{if (strpos($type,'body') !== false)}
{$item->activities assign="activities"}
{assign var="value" value=$activities}
{stringtoarray}
{foreach from=$myArray item=foo}
{if $foo !=''}
{assign var="existoverload" value="{cms_module module='Overload' filter_title_equal={$foo} summarytemplate='listrelated' detailpage='overload'}"}
{assign var="existsuppression" value="{cms_module module='Suppression' filter_title_equal={$foo} summarytemplate='listrelated' detailpage='suppression'}"}
<li><a href={$existoverload}{$existsuppression}>{$foo}</a></li>
{/if}
{/foreach}
{/if}
{/foreach}
</ul>
Wat wil je precies doen als je zegt "probleem is de dubbele titels en het sorteren binnen arrays i.p.v. in de hoofdarray."?
Waarom krijg je dubbele titels, en wat zijn die "arrays" precies?
Hier zie je het resultaat zonder die ontdubbeling (er is nog een extra Jquery voor de alfabetisering): http://allaboutheaven.org/out-of-body-test
Hiervoor heb ik gebruikt:
{if count($items) > 20}
<div id="outlist-nav" style="margin-top:14px;"></div>
<ul id="outlist" class="observationslist" style="margin-top:16px;margin-left:-24px;">
{else}
<ul id="outlist" class="observationslist" style="margin-left:-28px;">
{/if}
{sort data=$items}
{foreach from=$sorted item=item}
{$item->type assign="type"}
{if (strpos($type,'body') !== false)}
{$item->activities assign="activities"}
{assign var="value" value=$activities}
{stringtoarray}
{foreach from=$myArray item=foo}
{if $foo !=''}
{assign var="existoverload" value="{cms_module module='Overload' filter_title_equal={$foo} summarytemplate='listrelated' detailpage='overload'}"}
{assign var="existsuppression" value="{cms_module module='Suppression' filter_title_equal={$foo} summarytemplate='listrelated' detailpage='suppression'}"}
<li><a href={$existoverload}{$existsuppression}>{$foo}</a></li>
{/if}
{/foreach}
{/if}
{/foreach}
</ul>
Toevoeging op 27/10/2016 16:43:51:
Je hebt helemaal gelijk. Daarom heb ik de php bewerking in {stringtoarray} gezet. Als je naar http://allaboutheaven.org/out-of-body-test kijkt, zie je dat er nog wat moet gebeuren om de dubbele titels eruit te halen en alles te alfabetiseren. Ik krijg dubbele titels omdat het resultaat van de query opgedeeld wordt in strings die ik weliswaar uit elkaar haal (elke regel wordt met <br> gescheiden, daar breek ik de string op), maar omdat de titel in meerdere Observations voorkomt wordt die zo gedubbeld.