2 sözcük çıkarsa zaten ayrılıyor olmalı. Onu düşünerek yazdım.
İlk foreach'in ilk div'ine stil verebilirsiniz margin-top gibi.
echo "<div class='kelimeler'>";
foreach($h as $item) {
echo "<div class='kelimeKapsayici'>";
$kelime = $item["kelime"];
echo " <div class='kelime'>";
echo " <div>Kelime:</div>";
echo " <div>$kelime</div>";
echo " </div>";
echo " <div class='anlamlar'>";
echo " <div>Anlamlar</div>";
if(isset($item["anlamlar"]) && is_array($item["anlamlar"])) {
foreach($item["anlamlar"] as $anlam) {
$anlamStr = $anlam["anlam"];
$ozellik = $anlam["ozellik"];
echo "<div class='anlam'>";
echo " <div>";
echo " <div>Özellik:</div>";
echo " <div>$ozellik</div>";
echo " </div>";
echo " <div>";
echo " <div>Anlam:</div>";
echo " <div>$anlamStr</div>";
echo " </div>";
echo "</div>";
};
}
else echo "<div>Anlam bulunamadı</div>";
echo "</div>";
echo "<div class='birlesikler'>";
if(isset($item["birlesikler"]) && is_array($item["birlesikler"])) {
foreach($item["birlesikler"] as $birlesik) {
echo "<div>$birlesik</div>";
};
}
else echo "<div>Birleşikler bulunamadı</div>";
echo "</div>";
echo "</div>";
};
echo "</div>";
Her şeyi div'e çevirdim.
echo "<div class='kelimeler'>";
foreach($h as $item) {
echo "<div class='kelimeKapsayici'>";
$kelime = $item["kelime"];
echo " <div class='kelime'>";
echo " <div>Kelime:</div>";
echo " <div>$kelime</div>";
echo " </div>";
echo " <div class='anlamlar'>";
echo " <div>Anlamlar</div>";
foreach($item["anlamlar"] as $anlam) {
$anlamStr = $anlam["anlam"];
$ozellik = $anlam["ozellik"];
echo "<div class='anlam'>";
echo " <div>";
echo " <div>Özellik:</div>";
echo " <div>$ozellik</div>";
echo " </div>";
echo " <div>";
echo " <div>Anlam:</div>";
echo " <div>$anlamStr</div>";
echo " </div>";
echo "</div>";
};
echo "</div>";
echo "<div class='birlesikler'>";
foreach($item["birlesikler"] as $birlesik) {
echo "<div>$birlesik</div>";
};
echo "</div>";
echo "</div>";
};
echo "</div>";
foreach($item["anlamlar"] as $anlam) {
$anlamArr = explode(" ", $anlam["anlam"]);
for($i=0; $i<count($anlamArr); $i++) $anlamArr[$i] = div($anlamArr[$i]);
$anlamlar .= li(i("Özellik: ".$anlam["ozellik"]).div(implode("",$anlamArr)));
};
belki böyle olabilir bu foreach'i değiştirirseniz.
Anlamlarda geçen cümleyi boşluk karakterlerinden ayırıp her birini bir div içine alacak.
Şu an şöyle bir yapı oluşuyor olmalı:
<div>
<div>
<strong>Kelime: </strong>
<span>kelime</span>
</div>
<section>
<div>
<div><strong>Anlamlar</strong></div>
<ul>
<li><i>(Özellik: özellik)</i><span>anlam metni...</span></li>
<li><i>(Özellik: özellik)</i><span>anlam metni...</span></li>
</ul>
</div>
<div>
<div><strong>Birleşikler</strong></div>
<ul>
<li><span>birleşik kelime</span></li>
<li><span>birleşik kelime</span></li>
</ul>
</div>
</section>
</div>
Siz nasıl bir yapı istiyorsunuz?
Doğrudan kapsayıcı bir div içine alabilirsiniz.
Örn 2.kodu kullanıyorsanız:
echo $kelimeler; yerine echo "<div>$kelimeler</div>"; yazarsınız.
Hata kodlarını görebilmek için sayfanın üstünde bir yere şunları yazmayı deneyebilirsiniz:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Önceki mesajımı düzenledim. Noktalı virgül hatası olabilir...
function div($content) { return "<div>$content</div>"; }
function section($content) { return "<section>$content</section>"; }
function strong($content) { return "<strong>$content</strong>"; }
function span($content) { return "<span>$content</span>"; }
function i($content) { return "<i>$content</i>"; }
function ul($content) { return "<ul>$content</ul>"; }
function li($content) { return "<li>$content</li>"; }
$kelimeler = "";
$anlamlar = "";
$birlesikler = "";
foreach($h as $item) {
foreach($item["anlamlar"] as $anlam) {
$anlamlar .= li(i($anlam["ozellik"]).div($anlam["anlam"]));
};
foreach($item["birlesikler"] as $birlesik) {
$birlesikler .= li(span($birlesik));
};
$kelimeler .= div(
div(strong("Kelime: ").span($item["kelime"]))
.section(div(strong("Anlamlar")).ul($anlamlar))
.section(div(strong("Birleşikler")).ul($birlesikler))
);
};
echo $kelimeler;
Kodları test etme imkânım yok şu an. Varsayımsal olarak yazdım.
Hata veriyorsa sunucuda hata gösterimini açmalısınız yoksa hatayı göremeyiz.
Kodları if(count($h)) {...} içine alabilirsiniz.
print_r($h); komutunuzun çıktısı nedir?
Aşağıdaki örneklerden kendinize uygun olanı seçebilirsiniz.
En yakına yuvarla: round()
https://www.php.net/manual/en/function.round.php
round(3.4); // 3
round(3.5); // 4
round(3.6); // 4
round(3.6, 0); // 4
round(5.045, 2); // 5.05
round(5.055, 2); // 5.06
round(345, -2); // 300
round(345, -3); // 0
round(678, -2); // 700
round(678, -3); // 1000
round( 1.55, 1, PHP_ROUND_HALF_UP); // 1.6
round(-1.55, 1, PHP_ROUND_HALF_UP); // -1.6
round( 1.55, 1, PHP_ROUND_HALF_DOWN); // 1.5
round(-1.55, 1, PHP_ROUND_HALF_DOWN); // -1.5
round( 1.55, 1, PHP_ROUND_HALF_EVEN); // 1.6
round(-1.55, 1, PHP_ROUND_HALF_EVEN); // -1.6
round( 1.55, 1, PHP_ROUND_HALF_ODD); // 1.5
round(-1.55, 1, PHP_ROUND_HALF_ODD); // -1.5
round()'un 3.parametresindeki sabitler:
PHP_ROUND_HALF_UP : Sayıyı 0'dan uzaklaştırarak yuvarlar.
PHP_ROUND_HALF_DOWN : Sayıyı 0'a yaklaştırarak yuvarlar.
PHP_ROUND_HALF_EVEN : Sayıyı en yakın çift sayıya yaklaştırarak yuvarlar.
PHP_ROUND_HALF_ODD : Sayıyı en yakın tek sayıya yaklaştırarak yuvarlar.
Yukarı yuvarla: ceil()
https://www.php.net/manual/en/function.ceil.php
ceil(4.3); // 5
ceil(9.999); // 10
ceil(-3.14); // -3
Aşağı yuvarla: floor()
https://www.php.net/manual/en/function.floor.php
floor(4.3); // 4
floor(9.999); // 9
floor(-3.14); // -4
Siz, sayının kendisinden büyük ilk tam veya buçuklu sayıya yuvarlanmasını istiyorsunuz.
Yani 1.2 ise, kendisinden büyük ilk tam veya buçuklu sayı olan 1.5'e yuvarlansın.
Yani 1.7 ise, kendisinden büyük ilk tam veya buçuklu sayı olan 2.0'a yuvarlansın.
Bunun için özel bir fonksiyon oluşturmanız gerekecek. Şöyle bir fonksiyon yazdım:
function roundUpHalfOrInt($num) {
if(!is_numeric($num)) throw new Exception('Parameter of roundUpHalfOrInt() is not numeric!');
$num = (float)$num;
$numStr = (string)$num;
$numArr = explode(".", $numStr);
if(count($numArr)<2) return (float)$num;
$numFloatSide = (int)((string)$numArr[1])[0];
if($numFloatSide===0) return (float)$num;
if($numFloatSide < 5) return (float)($numArr[0].".5");
return (float)($numArr[0]+1);
}
Bu fonksiyona sayısal değeri verirseniz bahsettiğiniz şekilde yukarı yuvarlama yapacaktır.