Created
December 3, 2014 04:20
-
-
Save mkorostoff/5b8f8fa4eb0e5a9cf1fc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
protected function expandArguments(&$query, &$args) { | |
$modified = FALSE; | |
// If the placeholder value to insert is an array, assume that we need | |
// to expand it out into a comma-delimited set of placeholders. | |
foreach (array_filter($args, 'is_array') as $key => $data) { | |
$new_keys = array(); | |
foreach ($data as $i => $value) { | |
// This assumes that there are no other placeholders that use the same | |
// name. For example, if the array placeholder is defined as :example | |
// and there is already an :example_2 placeholder, this will generate | |
// a duplicate key. We do not account for that as the calling code | |
// is already broken if that happens. | |
$new_keys[$key . '_' . $i] = $value; | |
} | |
// Update the query with the new placeholders. | |
// preg_replace is necessary to ensure the replacement does not affect | |
// placeholders that start with the same exact text. For example, if the | |
// query contains the placeholders :foo and :foobar, and :foo has an | |
// array of values, using str_replace would affect both placeholders, | |
// but using the following preg_replace would only affect :foo because | |
// it is followed by a non-word character. | |
$query = preg_replace('#' . $key . '\b#', implode(', ', array_keys($new_keys)), $query); | |
// Update the args array with the new placeholders. | |
unset($args[$key]); | |
$args += $new_keys; | |
$modified = TRUE; | |
} | |
return $modified; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment