The TryingToScale PHP framework.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
tts_framework/src/classes/database/dummy_data.php

100 lines
2.5 KiB

<?php
declare(strict_types=1);
/**
* @author Robert Strutts <Robert@TryingToScale.com>
* @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);
}
}
}