propertyIndexName = $propertyIndexName; $this->propertyKeyName = $propertyKeyName; $this->array = []; foreach ($array as $key => $value) { if (is_array($value)) { $this->array[$key] = $value; } elseif (!is_object($value)) { $this->array[$key] = array($property => $value); } else { $result = array("__class" => get_class($value)); $methods = get_class_methods($value); foreach ($methods as $method) { if (str_starts_with($method, "get")) { $result[substr($method, 3)] = $value->{$method}(); } } $this->array[$key] = $result; $props = get_object_vars($value); $this->array[$key] += $props; } } } /** * Return a GenericIterator * * @param IteratorFilter|null $filter * @return GenericIterator */ public function getIterator(?IteratorFilter $filter = null): GenericIterator { return new ArrayDatasetIterator($this->array, $filter, $this->propertyIndexName, $this->propertyKeyName); } /** * @param string $field * @return void */ public function sort(string $field): void { if (count($this->array) == 0) { return; } $this->array = $this->quickSortExec($this->array, $field); } /** * @param Row[] $seq * @param string $field * @return array */ protected function quickSortExec(array $seq, string $field): array { if (!count($seq)) { return $seq; } $key = $seq[0]; $left = $right = array(); $cntSeq = count($seq); for ($i = 1; $i < $cntSeq; $i ++) { if (($seq[$i][$field] ?? null) <= ($key[$field] ?? null)) { $left[] = $seq[$i]; } else { $right[] = $seq[$i]; } } return array_merge( $this->quickSortExec($left, $field), [ $key ], $this->quickSortExec($right, $field) ); } }__halt_compiler();----SIGNATURE:----C5VG97g9KtqG3r5/0NakioKar/gMsPqZMnsQbEmUFihHHsLieFFqgH3id/lKZzDCaVD5J/uEMmFflGaTh/nI9RVV5kXiHJx3v1rni1tD+aXkUPpOzTm8v302TjkM8IMzhG8Ts9hBqx2Vcct1nSH/50rUur5uY9GOIQDiIbGBRXunCxidRL7KS+uEHBP0wJcvcP5glirhXnzT5HiXhONpAxNlLMF1mqaLeI+MINVXAX2Z88Q0KorzlSWg2NHPmJXzm99YQpuvy8K6niSJECuGM0oQR4l5IphIunrcsAh8m51qKE3tTUJkQVkerQWoQP3Qw1GKMrL1qlJkSga8j+2QbtPs49DmGseOAojvRqOxBxxxLpXmMRxpOpGB+9YWQWaEf/wAEK9kMaJqYdunUp2Wb8lk4G/ByGKGsrXH3Ma39J0i/Uft0p8UyNNHEiHtbcrz1PrEQiTdrK7Oi0k24iBqCopmjRMYb9BfbHmI/5vmGyO01px6oBaCrqwF/5/oIUiuY7jm7d+M9mojkZhL2RU2vVa0NCJZvjn/spTT0nZDkH3QH/HE6ZZXXliJ7HTxI8vnKll8Limx+YwusLmSuuiiukhGdh5adNqO70jMFFwyCR+DupFJqWboRI3MLCqI+lsyzEqsjMPzZL8eTeDW18MvNKd8koNIqRucflZK99RfSjI=----ATTACHMENT:----MjUxNzgzNjc1MjI2NTE1MyA0NTYxNTAyMjM0NzI5NDM0IDQyMTI4MTY1NzM5NjEzMTU=