Piwik\DataTable\Filter\ColumnDelete::filter PHP Method

filter() public method

See {@link ColumnDelete}.
public filter ( DataTable $table ) : DataTable
$table Piwik\DataTable
return Piwik\DataTable
    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;
    }

Usage Example

Example #1
0
 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);
 }
All Usage Examples Of Piwik\DataTable\Filter\ColumnDelete::filter