/** * @param array $data * * @return void * @dataProvider getData */ public function test_function(array $data) { // invoke logic & test $this->assertEquals($data['expResult'], SimpleArrayLibrary::getRectangularDimensions($data['array'])); }
/** * @param array $table * @param string $column * @param string $condition * @param array|string $value * * @return array * @throws InvalidArgumentException */ public static function whereCondition(array $table, $column, $condition, $value) { // input validation if (!is_numeric($column) && (empty($column) || !is_string($column))) { throw new InvalidArgumentException('Invalid column parameter'); } if (count(SimpleArrayLibrary::getRectangularDimensions($table)) != 2) { if (empty($table)) { return []; } else { throw new InvalidArgumentException('Table is not a rectangular 2 dimensional array'); } } $validConditions = ['>', '<', '=', '==', '>=', '<=', '<>', 'in', 'notin']; $condition = strtolower($condition); if (!in_array($condition, $validConditions)) { throw new InvalidArgumentException('Invalid condition parameter'); } if (in_array($condition, ['in', 'notin']) && !is_array($value)) { throw new InvalidArgumentException('In case of "in" & "notin" conditions, value must be an array'); } elseif (!in_array($condition, ['in', 'notin']) && !is_numeric($value) && !is_string($value) && !is_null($value)) { throw new InvalidArgumentException('Invalid value'); } $return = []; $tableNumeric = !SimpleArrayLibrary::isAssociative($table); foreach ($table as $index => $row) { if (!isset($row[$column])) { throw new InvalidArgumentException('Column missing from row: ' . $index); } $keep = true; switch ($condition) { case '>': $keep = $row[$column] > $value; break; case '<': $keep = $row[$column] < $value; break; case '>=': $keep = $row[$column] >= $value; break; case '<=': $keep = $row[$column] <= $value; break; case '=': case '==': $keep = $row[$column] == $value; break; case '<>': $keep = $row[$column] != $value; break; case 'in': $keep = in_array($row[$column], $value); break; case 'notin': $keep = !in_array($row[$column], $value); break; } if ($keep) { if ($tableNumeric) { $return[] = $row; } else { $return[$index] = $row; } } } return $return; }