function ctools_break_phrase
Parse integer sequences of the form "x,y,z" or "x+y+z" into separate values.
A string with integers separated by comma (,) is reported as an 'and' set; separation by a plus sign (+) or a space ( ) is an 'or' set. The meaning of this is up to the caller. Negative or fractional numbers are not recognised.
Additional space characters within or around the sequence are not allowed.
Parameters
$str: The string to parse.
Return value
object An object containing the properties:
- operator: Either 'and' or 'or' when there are multiple matched values.
Absent when invalid_input is TRUE or there is only one value.
- value: An array of integers (never strings) from $str. An empty array is
returned if the input is empty. A single integer input is returned as a single value, but no 'operator' is defined.
- invalid_input: TRUE if input could not be parsed and the values array
will contain just -1. This property is otherwise absent.
3 calls to ctools_break_phrase()
- CtoolsModuleTestCase::testBreakPhrase in tests/
ctools.test - Test that the break phrase function behaves as expected.
- ctools_terms_context in plugins/
arguments/ terms.inc - Discover if this argument gives us the term we crave.
- ctools_terms_from_node_context in plugins/
relationships/ terms_from_node.inc - Return a new context based on an existing context.
File
-
./
ctools.module, line 309
Code
function ctools_break_phrase($str) {
$object = new stdClass();
if (preg_match('/^([0-9]+[+ ])+[0-9]+$/', $str)) {
// The '+' character in a query string may be parsed as ' '.
$object->operator = 'or';
$object->value = preg_split('/[+ ]/', $str);
}
elseif (preg_match('/^([0-9]+,)*[0-9]+$/', $str)) {
$object->operator = 'and';
$object->value = explode(',', $str);
}
// Keep an 'error' value if invalid strings were given.
if (!empty($str) && (empty($object->value) || !is_array($object->value))) {
$object->value = array(
-1,
);
$object->invalid_input = TRUE;
return $object;
}
if (empty($object->value)) {
$object->value = array();
}
// Doubly ensure that all values are numeric only.
foreach ($object->value as $id => $value) {
$object->value[$id] = (int) $value;
}
return $object;
}