Аrray в PHP беше нещото което най-много ми хареса в php когато започвах да се занимава с програмиране. С времето обаче разбрах че array са много странно нещо, те са кръстоска между стандартния масив и hash таблици. По този въпрос има много материали в Интернет, където се казват плюсовете и минусите. Но това което искам се га да покажа е малко по различен поглед към Array.
Обикновено аз както и голяма част от PHP дивелопърите ползваме масивите или как нормален масив или като hash таблица, но много рядко като смесено нещо. Но при определени ситуации е доста полезно да се ползват като и двата типа на работа.
Например имам едни класове с който си дефинирам таблиците в базата данни и те генерират sql код и т.н.:
$this->createTable('product_brands', array(
'name' => array('string', 'limit' => 7),
'ord' => 'int',
'visible' => 'boolean',
));
Което за мен и моите колеги е доста ясно и разбираемо. Още повече че самото “разчитане” на типа на всяка колона е много лесно:
function column($name, $options){
$options = (array) $options;
$type = isset($options['type']) ? $options['type'] : $options[0];
// ....
}
Друго място на което ги ползвам е в един метод класа ми за работа с базиданни:
// WHERE visible = '1'
$db->where("'visible'='1'");
// WHERE category_id = '$id' AND visible = '1'
$db->where(array('category_id' => $id, 'visible' => 1));
// WHERE name LIKE '%{$name}%' AND category_id = '$id' AND visible = '1'
$db->where(array("name LIKE '%{$name}%'", 'category_id' => $id, 'visible' => 1));
Като where трябва да върне sql условие. А самия where метод е доста простичко написан:
function where($cond) {
if (!$cond)
return '';
if (!is_array($cond))
return 'WHERE ' . $cond . ' ';
$vals = array();
foreach($cond as $field => $value) {
$vals[] = is_numeric($field) ? $value : $field . '=' . $this->quote($value);
}
return 'WHERE ' . join(' AND ', $vals) . ' ';
}
update: Сега се сетих, че може array да се ползват по подобен начин и в новата версия на tag функцията ми, с която генерирам html код:
// <a href="myLink">some</a>
tag(array('a', 'href' => 'myLink', 'some');
// <a href="myLink">some</a>
tag(array('a', 'some', 'href' => 'myLink');
// <span>text</span>
tag(array('span', 'text');
// <img src="image.png" alt="" />
tag(array('img', 'src' => 'image.png', 'alt' => '');
п.п. доста от тези примери ще изглеждат още по-добре ако се сбъднат желанията ми от PHP6 whishlist ( особено точки 4 или 7 ).
