public filter ( |
||
$table | ||
Результат |
public function filter($table)
{
// always do recursive filter
$this->enableRecursive(true);
$recurse = false;
// only recurse if there are columns to remove/keep
// remove columns specified in $this->columnsToRemove
if (!empty($this->columnsToRemove)) {
foreach ($table as $index => $row) {
foreach ($this->columnsToRemove as $column) {
if (!array_key_exists($column, $row)) {
continue;
}
if ($this->deleteIfZeroOnly) {
$value = $row[$column];
if ($value === false || !empty($value)) {
continue;
}
}
unset($table[$index][$column]);
}
}
$recurse = true;
}
// remove columns not specified in $columnsToKeep
if (!empty($this->columnsToKeep)) {
foreach ($table as $index => $row) {
$columnsToDelete = array();
foreach ($row as $name => $value) {
$keep = false;
// @see self::APPEND_TO_COLUMN_NAME_TO_KEEP
foreach ($this->columnsToKeep as $nameKeep => $true) {
if (strpos($name, $nameKeep . self::APPEND_TO_COLUMN_NAME_TO_KEEP) === 0) {
$keep = true;
}
}
if (!$keep && $name != 'label' && !isset($this->columnsToKeep[$name])) {
// we cannot remove row directly to prevent notice "ArrayIterator::next(): Array was modified
// outside object and internal position is no longer valid in /var/www..."
$columnsToDelete[] = $name;
}
}
foreach ($columnsToDelete as $columnToDelete) {
unset($table[$index][$columnToDelete]);
}
}
$recurse = true;
}
// recurse
if ($recurse && !is_array($table)) {
foreach ($table as $row) {
$this->filterSubTable($row);
}
}
return $table;
}
private function handleArray($array) { $firstArray = null; $firstKey = null; if (!empty($array)) { $firstArray = reset($array); $firstKey = key($array); } $isAssoc = !empty($firstArray) && is_numeric($firstKey) && is_array($firstArray) && count(array_filter(array_keys($firstArray), 'is_string')); if (is_numeric($firstKey)) { $columns = Common::getRequestVar('filter_column', false, 'array', $this->request); $pattern = Common::getRequestVar('filter_pattern', '', 'string', $this->request); if ($columns != array(false) && $pattern !== '') { $pattern = new Pattern(new DataTable(), $columns, $pattern); $array = $pattern->filterArray($array); } $limit = Common::getRequestVar('filter_limit', -1, 'integer', $this->request); $offset = Common::getRequestVar('filter_offset', '0', 'integer', $this->request); if ($this->shouldApplyLimitOnArray($limit, $offset)) { $array = array_slice($array, $offset, $limit, $preserveKeys = false); } } if ($isAssoc) { $hideColumns = Common::getRequestVar('hideColumns', '', 'string', $this->request); $showColumns = Common::getRequestVar('showColumns', '', 'string', $this->request); if ($hideColumns !== '' || $showColumns !== '') { $columnDelete = new ColumnDelete(new DataTable(), $hideColumns, $showColumns); $array = $columnDelete->filter($array); } } return $this->apiRenderer->renderArray($array); }