Ik wil faq rich snippets toevoegen aan mijn pagina. Nu heb ik deze in een tabel staan en het kan zijn dat er maar 1 regel is maar kan ook 10 regels zijn. Als er meer dan 1 regel is dan moet er een komma achter elke regel behalve bij de laatste. Maar hoe krijg ik dat voor elkaar.


<?php 
	$sql = "SELECT * FROM items_rsf LEFT JOIN rsf ON rsf.rsf_id = items_rsf.rsf_id WHERE items_rsf.item_id = '".$row['item_id']."' ";
	$result = $conn->query($sql);

	if ($result->num_rows > 0) {
		// output data of each row
		echo '<script type="application/ld+json">';
		echo '{"@context":"https://schema.org","@type":"FAQPage","mainEntity":';

		while($row33 = $result->fetch_assoc()) {
			
			echo '[{"@type":"Question","name":"';
			echo $row33['rsf_question'];
			echo '","acceptedAnswer":[{"@type":"Answer","text":"';
			echo $row33['rsf_answer'];
			echo '\n"}]}';
echo ',';
		}
		echo ']}';
		echo '</script>';

	} else {
		echo "";
	}
	?>
Je weet het aantal regels ($result->num_rows), en je kunt bijhouden hoeveel je er al gehad hebt. Op het moment dat beiden aan elkaar gelijk zijn moet je *geen* komma invoegen.
Ja alleen weet ik niet hoe ik dat moet afhandelen.
Ik zou regel 5 vervangen voor;


<?php
$i = 0;
if( $num = $result->num_rows > 0) {
?>



En dan regel 17 vervangen voor


<?php
# var i vergelijken met de getelde records uit de db. Als deze lager is dan het aantal records, een komma plaatsen.
if( $i < $num ) {
	echo ',';
}

# var i met 1 verhogen, zodat deze oploopt gedurende de loop.
$i++;
?>


Vergeet naast dit alles niet je data in de query te beveiligen met real_escape_string. Nu is de query nog gevoelig voor sql injection.
Als het JSON is, waarom niet netjes met JSONencode() omzetten naar een JSON-string?
Dan hoef je alleen de array op te bouwen, en niet mer te spelen met komma's en andere tekens.

Laten we eens als voorbeeld een willekeurige JSON+LD pakken, om te laten zien hoe de array opgebouwd is:

<?php
$string= '
{
  "@context": "https://json-ld.org/contexts/person.jsonld",
  "@id": "http://dbpedia.org/resource/John_Lennon",
  "name": "John Lennon",
  "born": "1940-10-09",
  "spouse": "http://dbpedia.org/resource/Cynthia_Lennon"
}
';
print_r (json_decode($string));
?>


Hier krijg ik dan het volgende:

stdClass Object

(

[@context] => https://json-ld.org/contexts/person.jsonld

[@id] => http://dbpedia.org/resource/John_Lennon

[name] => John Lennon

[born] => 1940-10-09

[spouse] => http://dbpedia.org/resource/Cynthia_Lennon

)


Dus als je gewoon een nette array bouwt, en deze via json_encode() omzet, dan kan je die zonder fratsen in je HTML gebruiken.
Je zou kunnen bijhouden of je het eerste record hebt gehad in een boolean ($first, intialiseren op true, zet vervolgens direct op false), en anders een komma vooraan zetten. Of je gooit alles in een array ($data) en doet vervolgens een implode(',', $data)? Meerdere opties mogelijk.

Reageren