1. <?php
  2. class RateLimiter {
  3. private $capacity;
  4. private $queue = [];
  5. private $lock = [];
  6. public function __construct(int $capacity) {
  7. $this->capacity = $capacity;
  8. }
  9. public function acquire(): bool {
  10. $this->lock[$this->getulatedKey()] = true; // Acquire lock
  11. if (count($this->queue) < $this->capacity) {
  12. $this->queue[] = $this->getulatedKey();
  13. return true;
  14. }
  15. return false; // Rate limit exceeded
  16. }
  17. private function getulatedKey(): string {
  18. return uniqid(); // Generate a unique key
  19. }
  20. }
  21. function flattenArray(array $array): array {
  22. $flattened = [];
  23. $queue = [$array]; // Use a queue for depth-first traversal
  24. while (!empty($queue)) {
  25. $current = array_shift($queue); // Dequeue
  26. if (is_array($current)) {
  27. foreach ($current as $value) {
  28. $queue[] = $value; // Enqueue array elements
  29. }
  30. } else {
  31. $flattened[] = $current; // Add non-array elements to the result
  32. }
  33. }
  34. return $flattened;
  35. }
  36. //Example Usage
  37. $data = [
  38. 'a' => 1,
  39. 'b' => [
  40. 'c' => 2,
  41. 'd' => [
  42. 'e' => 3,
  43. ],
  44. ],
  45. 'f' => 4,
  46. ];
  47. $flattenedData = flattenArray($data);
  48. //Rate Limiting Example
  49. $rateLimiter = new RateLimiter(5); // Allow 5 requests
  50. for ($i = 0; $i < 10; $i++) {
  51. if ($rateLimiter->acquire()) {
  52. // Process request
  53. echo "Processing request " . ($i + 1) . "\n";
  54. } else {
  55. echo "Rate limit exceeded for request " . ($i + 1) . "\n";
  56. }
  57. sleep(0.2); //Simulate work being done
  58. }
  59. ?>

Add your comment