I gat a database table, which filed in with names and unique EntryIDs.
My goal is to Match every unique EntryID to another Unique EntryID.
I all ready tried this post here but it doesn’t work for that what I want.
Here is my code:
$query = "SELECT * FROM `names`";
$stmt = $db->prepare($query);
$stmt->execute();
$result = $stmt->get_result();
$stmt->close();
while($obj = $result->fetch_object()) {
$id = $obj->entryid;
if (isset($matches)) {
$matches[$id] = randomizer_II($id, $matches);
}
else {
$matches[$id] = randomizer_I($id);
}
}
print_r($matches);
$db->close();
FUNCTION randomizer_I($id) {
$random = rand(1,4);
if ($id != $random) {
return $random;
}
else {
randomizer_I($id);
}
}
FUNCTION randomizer_II($id, $matches) {
$random = rand(1,4);
if ($id != $random) {
if (!in_array($random, $matches)) {
return $random;
}
else {
randomizer_II($id, $matches);
}
}
else {
randomizer_II($id, $matches);
}
}
But all I get is for example:
Array ( [1] => 3 [2] => 4 [3] => [4] => 2 )
But this have an empty array spot in it or I get Following Error:
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 262144 bytes) in C:xampphtdocsWichtelnindex.php on line 43
What I expected (example):
Array ( [1] => 3 [2] => 4 [3] => 1 [4] => 2 )
or Array ( [1] => 4 [2] => 1 [3] => 2 [4] => 3 )
Something like that.
What have I done wrong here?
Advertisement
Answer
I gat it.
Some times PHP is a bi*** xD
$count = 0;
$collectNumbers = [];
while ($count < 4) {
for ($i = 0; $i < 4; $i++) {
$rand = mt_rand(0, 3);
if ($count == $rand) {
while ($count == $rand) {
$rand = mt_rand(0, 3);
}
}
$collectNumbers[] = $rand;
}
$unique = array_unique($collectNumbers);
$count = count($unique);
}
$finalArray = array_slice($unique, 0, 4);
print_r($finalArray);
echo("<br>");
foreach ($finalArray as $key => $value) {
echo "".(intval($key)+1)." => ".(intval($value)+1) ."<br>";
}
Here is the resault:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 0 )
1 => 2
2 => 3
3 => 4
4 => 1
No duplicates like [0] => 0 or 1 => 1
Works fine now.