Is it possible to position an array value depending on a specific numerical array? I have this table:
+---------+-------+-------+------------+---------------------+------------------------------+
| deck | count | break | cards | donator | image |
+---------+-------+-------+------------+---------------------+------------------------------+
| prejoin | 20 | 5 | 16, 01, 05 | User2, User1, User7 | img2.jpg, img1.jpg, img7.jpg |
+---------+-------+-------+------------+---------------------+------------------------------+
and this is what I have so far: https://shizen.hakumei.org/test.php
It shows only User7’s name and image link where I plan to show box 01 for User1’s name and image link then box 16 for User2’s name and image link. So basically like:
Box 16 = User2 (img2.jpg link)
Box 01 = User1 (img1.jpg link)
Box 05 = User7 (img7.jpg link)
This is the code I currently have to display the table from the given link:
function trim_value(&$value) { $value = trim($value); }
$res = $database->query("SELECT * FROM `table` ORDER BY `deck` LIMIT 1");
while ( $col = mysqli_fetch_assoc($res) ) {
echo '<center>';
$cards = explode(',', $col['cards']);
array_walk($cards, 'trim_value');
if ( $col['cards'] == '' ) { $count = 0; } else { $count = count($cards); }
$donator = explode(',', $col['donator']);
$donator = array_map(trim, $donator);
foreach ( $donator as $usr ) { $usr = trim($usr); }
$image = explode(',', $col['image']);
$image = array_map(trim, $image);
foreach ( $image as $img ) { $img = trim($img); }
echo '<h2>'.$col['deck'].' ('.$count.' / '.$col['count'].')</h2>
<table width="625" cellspacing="0" border="1"><tr>';
for ( $i = 1; $i <= $col['count']; $i++ ) {
$number = $i;
if ( $number < 10 ) { $number = "0$number"; }
$card = $number;
if ( in_array($card, $cards) ) echo '<td width="125" align="center" height="105">'.$card.'<br ><a href="'.$img.'" target="_blank">'.$usr.'</a></td>';
else { echo '<td width="125" align="center" height="105">00</td>'; }
if ( $col['break'] !== '0' && $i % $col['break'] == 0 ) { echo '</tr>'; }
}
echo '</table>
}
Many thanks in advance! If it’s not possible or if there’s any better way to do it, I’m open to ideas as well. 🙂
Advertisement
Answer
A tip: You don’t pay rent for space in your code, so you should use it for better scanability.
I have put your usernames and your images in a key based array, so you can just look up, if that key is existing, if not you don’t need a username or an image. Problem here is your storing in the table, that you use numbers with 0 at the begin.
You should also think about this: Delete the columns card, images, donator and put all values in a different table for example:
deck: prejoin, card_id: 16, user: 17, image: img12.jpg
while ( $col = mysqli_fetch_assoc($res) ) {
$data = array();
if ($col['cards'] == '' ){
$cards = explode(',', $col['cards']);
array_walk($cards, 'trim_value');
$count = count($cards);
$donator = explode(',', $col['donator']);
$image = explode(',', $col['image']);
foreach ($cards as $key=>$card){
$data[$card] = array(
'user' => trim($donator[$key]),
'img' => trim($image[$key])
);
}
}
echo '<h2>'.$col['deck'].' ('.$count.' / '.$col['count'].')</h2>
<table width="625" cellspacing="0" border="1"><tr>';
for ( $i = 1; $i <= $col['count']; $i++ ) {
$number = $i;
if ( $number < 10 )
$number = "0".$number;
if ( in_array($i, $data) )
echo '<td width="125" align="center" height="105">'.$i.'<br ><a href="'.$data[$i]['img'].'" target="_blank">'.$data[$i]['user'].'</a></td>';
else
echo '<td width="125" align="center" height="105">00</td>';
if ( $col['break'] !== '0' && $i % $col['break'] == 0 )
echo '</tr>';
}
echo '</table>';
}