Re: extract varying data from array with different formatting

From: Date: Sun, 12 Apr 2009 19:28:26 +0000
Subject: Re: extract varying data from array with different formatting
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-291397@lists.php.net to get a copy of this message
PJ wrote:
foreach does a nice job if you want the results identical each time. What can you use to change the formatting of the results dependent on the number of results. Here's an example: foreach ( $authors[$bookID] AS $authorID => $authorData ) {
                # Display the
                echo "{$authorData['first_name']} {$authorData['last_name']}\n";
            }
will echo - Joe Boe John Blue Andy Candy etc depending on how many rows we have. What I want is: Joe Boe, John Blue, Andy Candy & Hans Stick ( separated by commas, except for the last one which is separated with & . I thought of passing a variable to the foreach and then using if elseif... but that can't work because the variable is reset to 0 after each pass. Can't get switch to do it (maybe I don't understand it right. Help ?
your answer lies with not replacing foreach to make your life/output better. But with how the data is prepared and handed off to the foreach statement. I am guessing that what you want would be something like this. Since this looks like a snippet of code I sent you the other day, I will snag it "complete" from the other thread. <?php ...
        # Test to see if the book has any authors
        if ( isset($authors[$bookID]) ) {
            # Tell us how many authors we found
            echo 'Found: ', count($author[$bookID]), ' authors';
            # Create an array that will hold the output from the DB.
            $aList = array();
            # Loop through the authors
            foreach ( $authors[$bookID] AS $authorID => $authorData ) {
                # Add all the authors to that new array
                 $aList[] = "{$authorData['last_name']}, {$authorData['first_name']}";
            }
            # Sanitize the output
            $aList = array_map('htmlspecialchars', $aList);
            # Get a count of how many authors their is.
            $tAuthors = count($aList);
            # If more then one, do...
            if ( $tAuthors > 1 ) {
                # Take the last one off, so we can handle it differently
                $last_author = array_pop($aList);
                echo join(', ', $aList), ' & ', $last_author;
            # If only one, then do...
            } elseif ( $tAuthors == 1 ) {
                echo join('', $aList);
            }
            echo '<br />';
        } else {
            echo 'No authors found';
        }
... ?>

« previous php.general (#291397) next »