PHP – utilizarea array-urilor este benefica

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);
?>