Convert array condition (similar to mongo where) to SQL where clause.
<?php
$def = array(
':ageGroup',
'$or' => array(
':nature',
':need',
),
);
var_dump($def, arrayConditionToString($def)); echo "\n\n";
$def = array(
':ageGroup',
':nature',
':need',
);
var_dump($def, arrayConditionToString($def)); echo "\n\n";
$def = array(
'$or' => array(
':nature',
':need',
),
);
var_dump($def, arrayConditionToString($def)); echo "\n\n";
$def = array(
':test',
'$or' => array(
':nature',
':need',
array(
':test1',
':test2'
),
),
);
var_dump($def, arrayConditionToString($def)); echo "\n\n";
$def = array(
':test',
);
var_dump($def, arrayConditionToString($def)); echo "\n\n";
$def = array(
'$or' => ':test',
);
var_dump($def, arrayConditionToString($def)); echo "\n\n";
$def = array();
var_dump($def, arrayConditionToString($def)); echo "\n\n";
<?php
function arrayConditionToString(array $def, array &$parts = array(), $operator = 'AND')
{
foreach ($def as $k => $v) {
if (is_string($v) && 0 === strpos($v, ':')) {
$parts[] = ' (' . $v . ') ';
}
if (is_array($v)) {
if (0 === strpos($k, '$')) {
$subOperator = strtoupper(substr($k, 1));
} else {
$subOperator = 'AND';
}
$subPart = array();
arrayConditionToString($v, $subPart, $subOperator);
if (count($subPart)) {
$parts[] = ' (' . implode($subOperator, $subPart) . ') ';
}
}
}
if (count($parts)) {
$parts = array(implode($operator, $parts));
}
return reset($parts);
}