function sort($params) { if (count($this->dataset)) { $this->dataset = lmbArrayHelper::sortArray($this->dataset, $params, false); $this->iteratedDataset = null; } return $this; }
function testSortArray() { $arr = array(array('a' => 1, 'b' => 2), array('a' => 2, 'b' => 1), array('a' => 2, 'b' => 0)); $res = lmbArrayHelper::sortArray($arr, array('a' => 'DESC', 'b' => 'ASC')); $this->assertEqual($res, array(2 => array('a' => 2, 'b' => 0), 1 => array('a' => 2, 'b' => 1), 0 => array('a' => 1, 'b' => 2))); $res = lmbArrayHelper::sortArray($arr, array('a' => 'DESC', 'b' => 'ASC'), false); $this->assertEqual($res, array(array('a' => 2, 'b' => 0), array('a' => 2, 'b' => 1), array('a' => 1, 'b' => 2))); }
protected function _serializeHttpAttributes() { $uri = $this->http_request->getUri(); if (!($query = $uri->getQueryItems())) { return ''; } $flat = array(); lmbArrayHelper::toFlatArray($query, $flat); ksort($flat); return serialize($flat); }
function _checkProperNesting($nodes, $line = '') { $this->assertEqual(lmbArrayHelper::sortArray($nodes, array('path' => 'ASC')), $nodes); $path = lmbArrayHelper::getMinColumnValue('path', $nodes, $index); $parent_paths[] = $this->_getParentPath($path); $counter = 0; foreach ($nodes as $id => $node) { $parent_path = $this->_getParentPath($node['path']); $this->assertTrue(in_array($parent_path, $parent_paths), 'path is improperly nested: ' . $node['path'] . ' , expected parent not found: ' . $parent_path . ' at line: ' . $line); $parent_paths[] = $node['path']; } }
function _doSort($tree_array, &$sorted_tree_array, $sort_params, $parent_id, $id_hash, $parent_hash) { $children = array(); foreach ($tree_array as $index => $item) { if ($item[$parent_hash] == $parent_id) { $children[] = $item; unset($tree_array[$index]); } } if (!($count = sizeof($children))) { return; } $children = lmbArrayHelper::sortArray($children, $sort_params); if (!$sorted_tree_array) { $sorted_tree_array = $children; } else { $ids = lmbArrayHelper::getColumnValues($id_hash, $sorted_tree_array); $offset = array_search($parent_id, $ids) + 1; array_splice($sorted_tree_array, $offset, 0, $children); } for ($i = 0; $i < $count; $i++) { lmbTreeHelper::_doSort($tree_array, $sorted_tree_array, $sort_params, $children[$i][$id_hash], $id_hash, $parent_hash); } }
function toString() { $flat = array(); $query = ''; lmbArrayHelper::toFlatArray($this->__request, $flat); foreach ($flat as $key => $value) { if (is_object($value)) { continue; } $query .= $key . '=' . urlencode($value) . '&'; } //TODO: this is quite ugly but it works... $uri = clone $this->__uri; $uri->removeQueryItems(); return rtrim($uri->toString() . '?' . rtrim($query, '&'), '?'); }
function rewind() { foreach ($this->attach_relations as $relation_name => $params) { if (!in_array($relation_name, array_keys($this->loaded_attaches))) { $relation_type = $this->base_object->getRelationType($relation_name); $relation_info = $this->base_object->getRelationInfo($relation_name); $relation_class = $relation_info['class']; $relation_object = new $relation_class(null, $this->conn); switch ($relation_type) { case lmbActiveRecord::HAS_ONE: case lmbActiveRecord::MANY_BELONGS_TO: $ids = lmbArrayHelper::getColumnValues($this->prefix . $relation_info['field'], $this->iterator); if (!count($ids)) { $this->loaded_attaches[$relation_name] = array(); } else { $attached_objects = lmbActiveRecord::findByIds($relation_class, $ids, $params, $this->conn); $this->loaded_attaches[$relation_name] = lmbCollection::toFlatArray($attached_objects, $key_field = $relation_object->getPrimaryKeyName(), $export_each = false); } break; case lmbActiveRecord::BELONGS_TO: $ids = lmbArrayHelper::getColumnValues($this->prefix . $this->base_object->getPrimaryKeyName(), $this->iterator); if (!count($ids)) { $this->loaded_attaches[$relation_name] = array(); } else { $criteria = lmbSQLCriteria::in($relation_info['field'], $ids); $params['criteria'] = isset($params['criteria']) ? $params['criteria']->addAnd($criteria) : $criteria; $attached_objects = lmbActiveRecord::find($relation_class, $params, $this->conn); $this->loaded_attaches[$relation_name] = lmbCollection::toFlatArray($attached_objects, $key_field = $relation_info['field'], $export_each = false); } break; case lmbActiveRecord::HAS_MANY: if (!isset($params['sort'])) { $params['sort'] = $relation_object->getDefaultSortParams(); } $params['sort'] = array($relation_info['field'] => 'ASC') + $params['sort']; $query = lmbAROneToManyCollection::createFullARQueryForRelation($relation_info, $this->conn, $params); $ids = lmbArrayHelper::getColumnValues($this->prefix . $this->base_object->getPrimaryKeyName(), $this->iterator); $this->loaded_attaches[$relation_name] = array(); if (!count($ids)) { break; } $query->addCriteria(lmbSQLCriteria::in($relation_info['field'], $ids)); $attached_objects = $query->fetch(); foreach ($attached_objects as $attached_object) { $this->loaded_attaches[$relation_name][$attached_object->get($relation_info['field'])][] = $attached_object; } break; case lmbActiveRecord::HAS_MANY_TO_MANY: if (!isset($params['sort'])) { $params['sort'] = $relation_object->getDefaultSortParams(); } $params['sort'] = array($relation_info['field'] => 'ASC') + $params['sort']; $query = lmbARManyToManyCollection::createFullARQueryForRelation($relation_info, $this->conn, $params); $query->addField($relation_info['table'] . '.' . $relation_info['field'], "link__id"); $ids = lmbArrayHelper::getColumnValues($this->prefix . $this->base_object->getPrimaryKeyName(), $this->iterator); $this->loaded_attaches[$relation_name] = array(); if (!count($ids)) { break; } $query->addCriteria(lmbSQLCriteria::in($relation_info['field'], $ids)); $attached_objects = $query->fetch(); foreach ($attached_objects as $attached_object) { $this->loaded_attaches[$relation_name][$attached_object->get("link__id")][] = $attached_object; } break; } } } parent::rewind(); }
static function arrayMapRecursive($in_func, &$in_array) { foreach (array_keys($in_array) as $key) { $value =& $in_array[$key]; if (is_array($value)) { lmbArrayHelper::arrayMapRecursive($in_func, $value); } else { $value = call_user_func_array($in_func, array($value)); } } return $in_array; }
/** * Returns flat query_string * */ function getQueryString() { $query_string = ''; $query_items = array(); $flat_array = array(); lmbArrayHelper::toFlatArray($this->query_items, $flat_array); ksort($flat_array); foreach ($flat_array as $key => $value) { if ($value != '' || is_null($value)) { $query_items[] = $key . '=' . urlencode($value); } else { $query_items[] = $key; } } if ($query_items) { $query_string = implode('&', $query_items); } return $query_string; }