PHP: Quote Word
I needed a function similar to Perl's qw. If you pass a string to this function it will return an array of the words, stripping any separating whitespace. If you pass true as the second parameter you will instead get a hash returning each word in a key/value pair.
function qw($str,$return_hash = false) {
$str = trim($str);
// Word characters are any printable char
$words = str_word_count($str,1,"!\"#$%&'()*+,./0123456789-:;<=>?@[\]^_`{|}~");
if ($return_hash) {
$ret = array();
$num = sizeof($words);
// Odd number of elements, can't build a hash
if ($num % 2 == 1) {
return array();
} else {
// Loop over each word and build a key/value hash
for ($i = 0; $i < $num; $i += 2) {
$key = $words[$i];
$value = $words[$i + 1];
$ret[$key] = $value;
}
return $ret;
}
} else {
return $words;
}
}
This is useful in the following scenarios:
$str = "Leonardo Donatello Michelangelo Raphael";
$tmnt = qw($str);
$str = "
Leonardo Blue
Donatello Purple
Michelangelo Orange
Raphael Red
";
$turtles = qw($str,true);
Here is a similar function written in Python 3.x:
xarray = qw("reg blue green orange yellow")
def qw(xstr):
ret = xstr.strip().split()
return ret