Code Review Stack Exchange is a question and answer site for peer programmer code reviews. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I've got a SQL database that keeps track of which services a client has. I need to create an image using SVG that only displays the services that the client has. The database stores the services in the format 1,2,3,6,7,9. Here's what I have:

 <?php
    header("Content-type: image/svg+xml");
    $db = new PDO(**[redacted]**);
    $grabServices = $db->prepare("SELECT services FROM *** where name= :name");
    $grabServices->execute(array(":name" => "test" ));
    $services = $grabServices->fetchAll();
    $services = explode(",", $services[0][services]);
    var_dump($services);
?>

//snip...

<?php if(in_array(1, $services)){?>
    <line x1="820" y1="120" x2 ="790" y2="180" class="SaaS"/>
<?php }?>
<?php if(in_array(2, $services)){?>
    <line x1="905" y1="180" x2 ="700" y2="370" class="PM"/>
<?php }?>
//etc, etc,

This seems incredibly tedious to me. The only other way I can think to do this would have all the SVG elements created in a PHP array, but that seems even more wasteful. Is there a better way to do this?

share|improve this question
up vote 4 down vote accepted
<?php
$formats = array(
    '1' => array(
        'x1' => 820,
        'y1' => 120
    ),
    '2' => array(
        'x1' => 905,
        'y1' => 180
    )
);
?>

<?php foreach( $formats as $key => $format ) : ?>
    <?php if ( in_array( (int) $key, $services ) ) : ?>
        <line x1="<?php print $format['x1']; ?>" y1="<?php print $format['y1']; ?>" />
    <?php endif; ?>
<?php endforeach; ?>

I didn't do it for every field, but you get the idea.

This is tedious to write the array. But you have to write it somewhere. If there is no logic, the computer can't guess.

I think it's easier to read/write a simple array than all this XML though.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.