De ce?
Pai pentru simplul motiv ca pot fi parcurse cu un foreach (sau alta instructiune repetitiva) si putem scrie putin cod pentru a obtine multe lucruri.
Cum?
1. For starters: pentru a genera un meniu, in loc sa scrii 20 de linii de cod pe care sa le repeti 90% ai putea face un array
<?php
$arrayMenu = array(
'./'=>'Home',
'products'=>'Products',
'folio'=>'Portfolio',
'articles'=>'Articles',
'contact'=>'Contact me'
);
# initializam un string
$theMenu = '';
# parcurgem array-ul
foreach($arrayMenu as $link=>$label) {
$theMenu .= '<a href="'.$link.'">'.$label.'</a>'."n";
} $theMenu = substr($theMenu, 0, -1);
echo $theMenu;
# rezultatul vi-l imaginati voi...
?>
2. Ceva nou si util: referinta in foreach
<?php $someArray = array(1, 2, 3, 4, 5); foreach($someArray as &$value) $value *= 3; print_r($someArray); # result: 3, 6, 9, 12, 15 # fara referinta, valoarea lui $someArray nu se schimba ?>
3. Un pic mai avansat: Pentru a genera un meniu cu categorii infinite
<?php
$arrayMenu = array (
array (
'label'=>'Home',
'link'=>'./'
),
array (
'label'=>'Products',
'link'=>'products',
'items'=>array (
array (
'label'=>'Laptops',
'link'=>'products/laptops',
'items'=>array (
array (
'label'=>'Acer',
'link'=>'products/laptops/acer'
),
array (
'label'=>'HP',
'link'=>'products/laptops/hp'
),
array (
'label'=>'Dell',
'link'=>'products/laptops/dell'
),
array (
'label'=>'Tochiba',
'link'=>'products/laptops/tochiba'
),
array (
'label'=>'Samsung',
'link'=>'products/laptops/samsung'
)
)
),
array (
'label'=>'PC',
'link'=>'products/pc',
'items'=>array (
array (
'label'=>'Full systems',
'link'=>'products/pc/full'
),
array (
'label'=>'PC Components',
'link'=>'products/pc/parts',
'items'=>array(
array(
'label'=>'Video cards',
'link'=>'products/pc/parts/video'
),
array(
'label'=>'Sound cards',
'link'=>'products/pc/parts/sound'
),
array(
'label'=>'MainBoards',
'link'=>'products/pc/parts/main'
),
array(
'label'=>'Memory',
'link'=>'products/pc/parts/memory'
)
)
)
)
)
)
),
array (
'label'=>'Articles',
'link'=>'articles',
'items'=>array (
array (
'label'=>'IT',
'link'=>'articles/laptops',
'items'=>array (
array (
'label'=>'Acer',
'link'=>'articles/laptops/acer'
),
array (
'label'=>'HP',
'link'=>'articles/laptops/hp'
),
array (
'label'=>'Dell',
'link'=>'articles/laptops/dell'
),
array (
'label'=>'Tochiba',
'link'=>'articles/laptops/tochiba'
)
)
)
)
)
);
function createMenu(
$men,
$tpl=array(
'start'=>'<ul>', # start block
'start-item'=>'<li>', # start item block
'item'=>'<a href="[link]">[label]</a>', # ITEM
'end-item'=>'</li>', # end item block
'end'=>'</ul>' # end block
)
) {
$out = $tpl['start'];
foreach($men as $value) {
$out .= $tpl['start-item'];
$out .= str_replace(
array('[link]', '[label]'),
array($value['link'], $value['label']),
$tpl['item']
)."n";
if(isset($value['items']) && !empty($value['items'])) {
# == reapelare aici == fara recursivitate e mai greu
$out .= createMenu($value['items'], $tpl);
}
$out .= $tpl['end-item'];
}
$out .= $tpl['end']."n";
return $out;
}
echo createMenu($arrayMenu);
?>
4. Remove array duplicates – simplu si util:
<?php $array = array( 1=>'test4', 2=>'test1', 3=>'test2', 4=>'test1' ) $ArrayWithKeysFpl = array_flip($array); # principiul este ca un array nu poate avea chei duplicate $ArrayWithoutDuplicates = array_flip($array); ?>