Skip to content

Instantly share code, notes, and snippets.

@dario1985
Created March 2, 2012 17:10
Show Gist options
  • Save dario1985/1959705 to your computer and use it in GitHub Desktop.
Save dario1985/1959705 to your computer and use it in GitHub Desktop.
CakePHP Mongodb - update nested attributes
function generateSetArguments($data) {
$fieldsAndValues = array();
$iterator = new RecursiveIteratorIterator(new RecursiveArrayOnlyIterator($data));
foreach ($iterator as $value) {
$path = array();
foreach (range(0, $iterator->getDepth()) as $depth) {
$path[] = $iterator->getSubIterator($depth)->key();
}
$path = implode('.', $path);
$fieldsAndValues[$path] = $value;
}
return $fieldsAndValues;
}
// and a iterator to preserve object values
class RecursiveArrayOnlyIterator extends RecursiveArrayIterator
{
/**
* Override RecursiveArrayIterator
* @return bool
*/
public function hasChildren()
{
$current = $this->current();
return !empty($current) && is_array($current);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment