Hoi Hoi,


Ik heb een vraagje over de explode functie.
Als ik een explode uitvoer dan word deze in een associative array gezet.
Kan dit ook naar een simple array vertaald worden?


<?php
//explode output standaard
Array ( [0] => 123 [1] => 456 [2] => 789 );


//de output die ik graag zou krijgen
Array ( '123',  '456', '789');
?>
In beide gevallen komt het er associatief uit. Zo werken array's nu eenmaal.

https://3v4l.org/clWM0
Alle arrays worden geïndexeerd. Wanneer je niet expliciet een index aangeeft, wordt er vanaf 0 genummerd.

Weet niet precies wat je bedoeldt met een simpel array, maar alle arrays hebben een index.

Indien je twijfelt over de (exacte) inhoud, en de typen van de elementen (want hierboven heb je een array met strings en eentje met integers, dus in die zin verschillen deze van elkaar), dan kun je altijd de inhoud inspecteren met hulpfuncties zoals print_r() of var_dump().
Als uitvoer kan het zo:
<?php
$arr1 = Array ( 0 => 123, 1 => 456, 2 => 789 );
print '$arr2 = Array ( \'' . implode('\', \'', $arr1) . '\' );';
?>

Resultaat:
$arr2 = Array ( '123', '456', '789' );
$arr1 is niet leeg, zie regel 2.
Volgens mij gaat er volgens Thomas om dat 'áls $arr1 leeg is'. Ik heb het idee dat hij bedoelt dat je in dat geval een lege array moet ziet.

Als $arr1 leeg is heeft Youri geen probleem, een lege associatieve array heeft geen indexes.
Ik begrijp dan ook niet helemaal waarom Thomas dit aanhaalt?
Bijna goed:
Als $arr1 leeg is, dan krijgt implode niets door, en geeft het een foutmelding.
Als de array van $arr1 leeg is, dan krijg je een werkende output:

<?php
$arr2 = Array ( '' );
?>
Nog niet helemaal logisch dus omdat je toch een array blijft hebben met een leeg element
Een implode op een leeg array is volgens mij prima toegestaan?

Het probleem is inderdaad dat als je een leeg array als invoer hebt er een (niet-leeg) array met een (leeg) element geretourneerd wordt.

Misschien is het handig als de topicstarter verder toelicht wat nu precies het probleem is? Een explode geeft aan dat het geserialiseerde invoer betrof waarbij blijkbaar de keys/indexen toch geen betekenis hadden. Wat maakt het dan uit welke index hier aan toegekend wordt met een explode? Zoals eerder aangehaald, alle arrays hebben indexen.

En hiervoor zou je nog kunnen kijken naar de aanpak. Waarom is de invoer uberhaupt geserialiseerd? Heb je invloed/zeggenschap op/over de vorm van de opslag? Wellicht wil je dat dan gestructureerd(er) aanpakken (dan de boel serialiseren) of in een standaard formaat gieten (bijvoorbeeld JSON)?
Ik denk dat jullie de discussie op een zijspoor zetten.

Youri vroeg: "Als ik een explode uitvoer dan word deze in een associative array gezet."

Waarna ik zei: "Een lege associatieve array heeft geen indexes."

Dus: van een lege array is hier geen sprake, want die levert geen indexes, en is daarmee niet associatief.
Waarom dan toch doorzagen? Kan je dan niet beter de code verbeteren met je eigen if()-je voor lege arrays?
Weet je wat? Ik doe het wel voor, dat voorkomt veel onnodige alinea's:

<?php
$arr1 = [];
echo (count($arr1) > 0) ? '$arr2 = Array ( \'' . implode('\', \'', $arr1) . '\' );' : '$arr2 = Array ();';
?>

Kijk, nu werkt het ook met lege arrays. Goed he?
En ik hoor nu al een argument opborrelen: "Ja, maar nu heb je twee keer '$arr2 = Array ('.
Dat is voor de leesbaarheid.
Maar je bent natuurlijk vrij om daar hele mooie code van te maken. Plak het vooral hieronder. Succes.

Reageren