Dynamic variables in looper

95 Views Asked by At

This is my simple looper code

foreach( $cloud as $item ) {

    if ($item['tagname'] == 'nicetag') {
        echo $item['tagname'];
            foreach( $cloud as $item ) {
                echo $item['desc'].'-'.$item['date'];
            }
    } else 
        //...
    }

I need to use if method in this looper to get tags with same names but diferent descriptions and dates. The problem is that I dont know every tag name becouse any user is allowed to create this tags. Im not really php developer so I'm sory if it's to dummies question and thanks for any answers!

1

There are 1 best solutions below

4
On BEST ANSWER

One possible solution is to declare a temporary variable that will hold tagname that is currently looped through:

$currentTagName = '';
foreach( $cloud as $item ) {
    if ($item['tagname'] != $currentTagName) {
        echo $item['tagname'];
        $currentTagName = $item['tagname'];
    }

    echo $item['desc'] . '-' . $item['date'];
}

I presume that your array structure is as follows:

$cloud array(
    array('tagname' => 'tag', 'desc' => 'the_desc', 'date' => 'the_date'),
    array('tagname' => 'tag', 'desc' => 'the_desc_2', 'date' => 'the_date_2'),
    ...
);

BUT

This solution raises a problem - if your array is not sorted by a tagname, you might get duplicate tagnames.

So the better solution would be to redefine your array structure like this:

$cloud array(
    'tagname' => array (
        array('desc' => 'the_desc', 'date' => 'the_date'),
        array('desc' => 'the_desc_2', 'date' => 'the_date_2')
    ),
    'another_tagname' => array (
        array('desc' => 'the_desc_3', 'date' => 'the_date_3'),
        ...
    )
);

and then you can get the data like this:

foreach ($cloud as $tagname => $items) {
    echo $tagname;

    foreach($items as $item) {
        echo $item['desc'] . '-' . $item['date'];
    }
}