Ik heb een array die er als volgt uit ziet:


Array
(
    [redux_repeater_data] => Array
        (
            [0] => Array
                (
                    [title] => 
                )

            [1] => Array
                (
                    [title] => 
                )

        )

    [mid-footer-elements-elem-icon] => Array
        (
            [0] => fa fa-music
            [1] => fa fa-search
        )

    [mid-footer-elements-elem-text] => Array
        (
            [0] => 
            [1] => Hello
        )
)

Ik kan de waar krijgen doormiddel van de volgende code:


echo '<ul>';

foreach (array_slice($midFooter1Data, 1) as $key => $innerArray) {

      echo '$key';

      if (is_array($innerArray)){
		foreach ($innerArray as $key => $value) {

			if ($value == '')
			    continue;

			echo '<li>';

			echo $value;

			echo '</li>';
		}
      }
} 

echo '</ul>';


De eerste array wordt eruit gehaald door de array_slice, dat is ook de bedoeling.

De eerste echo $key toont de keys van de array's, nu probeer ik er achter te komen welke array een lege waarde heeft, die wordt in de tweede foreach eruit gelaten, maar ik om een goede list items te maken, denk ik dat het nodig is om te weten welke value waar hoort.

Bijvoorbeeld:

mid-footer-elements-elem-icon -> is een fonticon die voor een list item moet komen als deze bestaat.
mid-footer-elements-elem-text -> is de tekst die in de list item komt.

Eigenlijk wil ik zoiets als:


if($mid-footer-elements-elem-icon != '') {
    $mid-footer-elements-elem-icon[$value];
}


Doe ik iets verkeerd met de code?

Thanks

[size=xsmall]Toevoeging op 15/01/2017 18:53:54:[/size]

Nou ik denk dat ik het opgelost heb, hieronder de code die ik nu gebruik:

mid-footer-elements-repeater-1 is de array.


$midFooter1Data = $sent_framework['mid-footer-elements-repeater-1'];

echo '<ul class="fa-ul">';

$itemCount = (sizeof($midFooter1Data['mid-footer-elements-elem-text']) != '') ? sizeof($midFooter1Data['mid-footer-elements-elem-text']) : null;

for ($i=0; $i < $itemCount; $i++) {

echo '<li>';

if (isset($midFooter1Data['mid-footer-elements-elem-icon'][$i]) && $midFooter1Data['mid-footer-elements-elem-icon'][$i] != '') {
echo '<i class="fa-li '.$midFooter1Data['mid-footer-elements-elem-icon'][$i].'"></i>';
}

if (isset($midFooter1Data['mid-footer-elements-elem-text'][$i]) && $midFooter1Data['mid-footer-elements-elem-text'][$i] != '') {
echo $midFooter1Data['mid-footer-elements-elem-text'][$i];
}

echo '</li>';

}

echo '</ul>';


Deze oplossing werkt, als iemand een betere oplossing/code heeft dan mag erop gereageerd worden.
if (isset(X) && X != '') { ... }

kun je in ieder geval verkorten tot
if (!empty(X)) { ... }

Daarnaast kun je code-fragmenten tussen [code]...[/code] blokken zetten.
Hoe kom je aan dit initieel array? Is dit gegeven of bouw je deze zo op? Het is natuurlijk handiger als alles meteen op een handige plek staat zodat je hier ook gebruik van kunt maken in plaats van dat je alsnog in een genest array alles bij elkaar moet zoeken.

Ik zie wel een aantal vreemde dingen:
echo '$key';

Dit drukt letterlijk de tekst '$key' (zonder de enkele quotes) af, en niet de waarde van $key.

sizeof($midFooter1Data['mid-footer-elements-elem-text']) != ''

Dit is een vreemde vergelijking omdat sizeof() een integer retourneert. Daarnaast is sizeof() een alias van count(). Het is beter om aliassen te vermijden als je dit kunt doen. Wat dus beter zou zijn is:
count($midFooter1Data['mid-footer-elements-elem-text']) > 0
Hi Thomas,

Bedankt voor je reactie.

Die echo $key wordt al niet meer gebruikt, zoals je in mijn toevoeging kan zien.

Ik heb de sizeof veranderd in count en nog een paar kleine aanpassingen gemaakt om de code meer leesbaar te maken.

Bedankt nogmaals.

Reageren