Soru basit. Kodumda bir foreach
döngüsü var:
foreach($array as $element) {
//code
}
Bu döngüde, ilk veya son iterasyonda olduğumuzda farklı tepki vermek istiyorum.
Bu nasıl yapılır?
İlk ve son elemanları diziden çıkarabilir ve bunları ayrı ayrı işleyebilirsiniz.
Bunun gibi:
<?php
$array = something();
$first = array_shift($array);
$last = array_pop($array);
// do something with $first
foreach ($array as $item) {
// do something with $item
}
// do something with $last
?>
Tüm biçimlendirmeyi satır içi etiketler yerine CSS'ye kaldırmak kodunuzu iyileştirecek ve yükleme süresini hızlandıracaktır.
Mümkün olduğunca HTML ile php mantığını karıştırmaktan da kaçınabilirsiniz.
Sayfanızı bu şekilde ayırarak çok daha okunabilir ve sürdürülebilir hale getirebilirsiniz:
<?php
function create_menu($params) {
//retirive menu items
//get collection
$collection = get('xxcollection') ;
foreach($collection as $c) show_collection($c);
}
function show_subcat($val) {
?>
<div class="sub_node" style="display:none">
<img src="../images/dtree/join.gif" align="absmiddle" style="padding-left:2px;" />
<a id="'.$val['xsubcatid'].'" href="javascript:void(0)" onclick="getProduct(this , event)" class="sub_node_links" >
<?php echo $val['xsubcatname']; ?>
</a>
</div>
<?php
}
function show_cat($item) {
?>
<div class="node" >
<img src="../images/dtree/plus.gif" align="absmiddle" class="node_item" id="plus" />
<img src="../images/dtree/folder.gif" align="absmiddle" id="folder">
<?php echo $item['xcatname']; ?>
<?php
$subcat = get_where('xxsubcategory' , array('xcatid'=>$item['xcatid'])) ;
foreach($subcat as $val) show_subcat($val);
?>
</div>
<?php
}
function show_collection($c) {
?>
<div class="parent" style="direction:rtl">
<img src="../images/dtree/minus.gif" align="absmiddle" class="parent_item" id="minus" />
<img src="../images/dtree/base.gif" align="absmiddle" id="base">
<?php echo $c['xcollectionname']; ?>
<?php
//get categories
$cat = get_where('xxcategory' , array('xcollectionid'=>$c['xcollectionid']));
foreach($cat as $item) show_cat($item);
?>
</div>
<?php
}
?>
1: Neden basit bir for
deyimi kullanmıyorsunuz? Bir Iterator
değil de gerçek bir dizi kullandığınızı varsayarsak, sayaç değişkeninin 0 mı yoksa tam eleman sayısından bir eksik mi olduğunu kolayca kontrol edebilirsiniz. Bence bu en temiz ve anlaşılabilir çözümdür...
$array = array( ... );
$count = count( $array );
for ( $i = 0; $i < $count; $i++ )
{
$current = $array[ $i ];
if ( $i == 0 )
{
// process first element
}
if ( $i == $count - 1 )
{
// process last element
}
}
2: Ağaç yapınızı saklamak için Nested Sets kullanmayı düşünmelisiniz. Ek olarak, özyinelemeli işlevler kullanarak her şeyi geliştirebilirsiniz.