PHPackages                             olcaytaner/datastructure - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. olcaytaner/datastructure

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

olcaytaner/datastructure
========================

Data Structure Library

1.0.1(1y ago)0278GPL-3.0-or-laterPHP

Since Dec 28Pushed 2mo agoCompare

[ Source](https://github.com/StarlangSoftware/DataStructure-Php)[ Packagist](https://packagist.org/packages/olcaytaner/datastructure)[ RSS](/packages/olcaytaner-datastructure/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (1)Versions (3)Used By (8)

Cache
=====

[](#cache)

The idea of caching items for fast retrieval goes back nearly to the beginning of the computer science. We also use that idea and use a LRU cache for storing morphological analyses of surface forms. Before analyzing a surface form, we first look up to the cache, and if there is an hit, we just take the analyses from the cache. If there is a miss, we analyze the surface form and put the morphological analyses of that surface form in the LRU cache. As can be expected, the speed of the caching mechanism surely depends on the size of the cache.

For Developers
==============

[](#for-developers)

You can also see [Cython](https://github.com/starlangsoftware/DataStructure-Cy), [Java](https://github.com/starlangsoftware/DataStructure), [C](https://github.com/starlangsoftware/DataStructure-C), [C++](https://github.com/starlangsoftware/DataStructure-CPP), [Swift](https://github.com/starlangsoftware/DataStructure-Swift), [Python](https://github.com/starlangsoftware/DataStructure-Py), [Js](https://github.com/starlangsoftware/DataStructure-Js), or [C#](https://github.com/starlangsoftware/DataStructure-CS) repository.

Requirements
------------

[](#requirements)

- [Php 8.0 or higher](#php)
- [Git](#git)

### Php

[](#php)

To check if you have a compatible version of Php installed, use the following command:

```
php -V

```

You can find the latest version of Php [here](https://www.php.net/downloads/).

### Git

[](#git)

Install the [latest version of Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git).

Download Code
-------------

[](#download-code)

In order to work on code, create a fork from GitHub page. Use Git for cloning the code to your local or below line for Ubuntu:

```
git clone

```

A directory called DataStructure will be created. Or you can use below link for exploring the code:

```
git clone https://github.com/starlangsoftware/DataStructure-Php.git

```

Open project with PhpStorm IDE
------------------------------

[](#open-project-with-phpstorm-ide)

Steps for opening the cloned project:

- Start IDE
- Select **File | Open** from main menu
- Choose `DataStructure-Php` file
- Select open as project option
- Couple of seconds, dependencies will be downloaded.

For Developers
==============

[](#for-developers-1)

- [CounterHashMap](#counterhashmap)
- [LRUCache](#lrucache)

CounterHashMap
--------------

[](#counterhashmap)

CounterHashMap bir veri tipinin kaç kere geçtiğini hafızada tutmak için kullanılmaktadır.

Bir CounterHashMap yaratmak için

```
$a = new CounterHashMap()

```

Hafızaya veri eklemek için

```
put(mixed $key)

```

Örneğin,

```
$a->put("ali");

```

Bu aşamanın ardından "ali" nin sayacı 1 olur.

Hafızaya o veriyi birden fazla kez eklemek için

```
putNTimes(mixed $key, int $N)

```

Örneğin,

```
$a->putNTimes("veli", 5)

```

Bu aşamanın ardından "ali"'nin sayacı 5 olur.

Hafızada o verinin kaç kere geçtiğini bulmak için

```
count(mixed key):int

```

Örneğin, "veli" nin kaç kere geçtiğini bulmak için

```
kacKere = $a->count("veli")

```

Bu aşamanın ardından kacKere değişkeninin değeri 5 olur.

Hafızada hangi verinin en çok geçtiğini bulmak için

```
max() -> mixed

```

Örneğin,

```
kelime = $a->max()

```

Bu aşamanın ardından kelime "veli" olur.

LRUCache
--------

[](#lrucache)

LRUCache veri cachelemek için kullanılan bir veri yapısıdır. LRUCache en yakın zamanda kullanılan verileri öncelikli olarak hafızada tutar. Bir LRUCache yaratmak için

```
LRUCache(int $cacheSize)

```

kullanılır. cacheSize burada cachelenecek verinin büyüklüğünün limitini göstermektedir.

Cache'e bir veri eklemek için

```
add(string|int $key, mixed $data)

```

kullanılır. data burada eklenecek veriyi, key anahtar göstergeyi göstermektedir.

Cache'de bir veri var mı diye kontrol etmek için

```
contains(string|int $key): bool

```

kullanılır.

Cache'deki veriyi anahtarına göre getirmek için

```
get(string|int $key): mixed

```

kullanılır.

For Contibutors
===============

[](#for-contibutors)

### composer.json file

[](#composerjson-file)

1. autoload is important when this package will be imported.

```
  "autoload": {
    "psr-4": {
      "olcaytaner\\WordNet\\": "src/"
    }
  },

```

2. Dependencies should be maximum (not only direct but also indirect references should also be given), everything directly in the code should be given here.

```
  "require-dev": {
    "phpunit/phpunit": "11.4.0",
    "olcaytaner/dictionary": "1.0.0",
    "olcaytaner/xmlparser": "1.0.1",
    "olcaytaner/morphologicalanalysis": "1.0.0"
  }

```

### Data files

[](#data-files)

1. Add data files to the project folder. Subprojects should include all data files of the parent projects.

### Php files

[](#php-files)

1. Do not forget to comment each function.

```
    /**
     * Returns true if specified semantic relation type presents in the relations list.
     *
     * @param SemanticRelationType $relationType element whose presence in the list is to be tested
     * @return bool true if specified semantic relation type presents in the relations list
     */
    public function containsRelationType(SemanticRelationType $relationType): bool{
        foreach ($this->relations as $relation){
            if ($relation instanceof SematicRelation && $relation->getRelationType() == $relationType){
                return true;
            }
        }
        return false;
    }

```

2. Function names should follow caml case.

```
    public function getRelation(int $index): Relation{

```

3. Write getter and setter methods.

```
    public function getOrigin(): ?string
    public function setName(string $name): void

```

4. Use standard javascript test style by extending the TestCase class. Use setup when necessary.

```
class WordNetTest extends TestCase
{
    private WordNet $turkish;

    protected function setUp(): void
    {
        ini_set('memory_limit', '450M');
        $this->turkish = new WordNet();
    }

    public function testSize()
    {
        $this->assertEquals(78327, $this->turkish->size());
    }

```

5. Enumerated types should be declared with enum.

```
enum CategoryType
{
    case MATHEMATICS;
    case SPORT;
    case MUSIC;
    case SLANG;
    case BOTANIC;

```

6. If there are multiple constructors for a class, define them as constructor1, constructor2, ..., then from the original constructor call these methods.

```
    public function constructor1(string $path, string $fileName): void
    public function constructor2(string $path, string $extension, int $index): void
    public function __construct(string $path, string $extension, ?int $index = null)

```

7. Use \_\_toString method if necessary to create strings from objects.

```
    public function __toString(): string

```

8. Use xmlparser package for parsing xml files.

```
  $doc = new XmlDocument("../test.xml");
  $doc->parse();
  $root = $doc->getFirstChild();
  $firstChild = $root->getFirstChild();

```

###  Health Score

33

—

LowBetter than 75% of packages

Maintenance67

Regular maintenance activity

Popularity9

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~10 days

Total

2

Last Release

496d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/8903e2f2ee6f2b7849f720cf76786a074796f23ac27e12bde3036de5ca12de3f?d=identicon)[olcaytaner](/maintainers/olcaytaner)

---

Top Contributors

[![olcaytaner](https://avatars.githubusercontent.com/u/39756553?v=4)](https://github.com/olcaytaner "olcaytaner (2 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/olcaytaner-datastructure/health.svg)

```
[![Health](https://phpackages.com/badges/olcaytaner-datastructure/health.svg)](https://phpackages.com/packages/olcaytaner-datastructure)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
