หากเราต้องการเขียนโค้ดเพื่อแปลงสายอักขระที่เป็น attribute (อาจจะมาจากแท็กของ html หรืออื่นๆ) ให้เป็นอาร์เรย์ เพื่อให้ง่ายต่อการนำไปใช้งาน สามารถใช้ฟังก์ชั่น parseAttributes ด้านล่างนี้นะครับ ตัวอย่างสายอักขระอาจจะมาในรูปแบบดังต่อไปนี้
$str = "width=400 height=300"
$str = "color="#dddddd""
function parseAttributes($str) {
$pattern = '/(\\w+)\s*=\\s*("[^"]*"|\'[^\']*\'|[^"\'\\s>]*)/';
$matches = array();
preg_match_all($pattern, $str, $matches, PREG_SET_ORDER);
$attrs = array();
foreach ($matches as $match) {
if (($match[2][0] == '"' || $match[2][0] == "'") && $match[2][0] == $match[2][strlen($match[2])-1]) {
$match[2] = substr($match[2], 1, -1);
}
$name = strtolower($match[1]);
$value = html_entity_decode($match[2]);
switch ($name) {
case 'class':
$attrs[$name] = preg_split('/\s+/', trim($value));
break;
case 'style':
// parse CSS property declarations
break;
default:
$attrs[$name] = $value;
}
}
return $attrs;
}