4
\$\begingroup\$

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?

asked Jul 10, 2012 at 13:51
\$\endgroup\$

1 Answer 1

5
\$\begingroup\$
<?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.

answered Jul 10, 2012 at 14:29
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.