* @copyright Copyright (c) 2022, Robert Strutts. * @license MIT */ namespace tts\database; final class dummy_data { private $pdo; private $random_engine; public function __construct($pdo) { $this->pdo = $pdo; $this->random_engine = new \tts\random_engine(); } /* * Helper for add_dummy_data and get_dummy_data. * Purpose: To return ONE ROW of junk/dummy data from input data. * @param array $data * @retval array of random dummy data AKA one row worth of it. */ private function use_dummy_data(array $data): array { $ret = []; foreach ($data as $field => $array_values) { $array_count = \bs_tts\common::get_count($array_values); if ($array_count) { $ret[$field] = $array_values[$this->random_engine->get_int(0, $array_count - 1)]; } } return $ret; } /** * Inserts Dummy Data to DB * @param int $num_rows to add/make * @param array $data sample data EX: array('fname'=>array('bob','kim','lisa', ect...), ...) * @retval bool true */ public function add_dummy_data(string $table, int $num_rows, array $data): bool { for ($i = 0; $i < $num_rows; $i++) { $bind_data = $this->use_dummy_data($data); $fields = []; foreach ($data as $field => $array_values) { $fields[] = $field; } $sql = "INSERT INTO `{$table}` " . "(" . implode(", ", $fields) . ") " . "VALUES (:" . implode(", :", $fields) . ");"; $bind = []; foreach ($fields as $field) { $bind[":$field"] = $bind_data[$field]; } unset($bind_data); unset($fields); $pdo_stmt = $this->pdo->prepare($sql); $exec = $pdo_stmt->execute($bind); unset($bind); } return true; } /** * Make an array of fields for a fake row of dummy data out of input data. * @param int $num_rows to make * @param array $data sample data * @retval array of rows with dummy data in it. */ public function get_dummy_data(int $num_rows, array $data): array { if ($num_rows > 100) { throw new \LengthException("Generating too much dummy data via \$num_rows!"); } $ret = []; for ($i = 0; $i < $num_rows; $i++) { $ret[] = $this->use_dummy_data($data); } return $ret; } public function get_dummy_data_generator( int $num_rows, array $data ): \Generator { for ($i = 0; $i < $num_rows; $i++) { yield $this->use_dummy_data($data); } } }