An open API service indexing awesome lists of open source software.

https://github.com/hichemtab-tech/namecrement-php

A smart php utility that generates unique incremental names, preventing naming collisions by automatically appending incremental suffixes.
https://github.com/hichemtab-tech/namecrement-php

incremental php unique unique-name

Last synced: 4 months ago
JSON representation

A smart php utility that generates unique incremental names, preventing naming collisions by automatically appending incremental suffixes.

Awesome Lists containing this project

README

          

# Namecrement (PHP)

![Tests](https://github.com/HichemTab-tech/Namecrement-php/workflows/Tests/badge.svg)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/HichemTab-tech/Namecrement-php/blob/master/LICENSE)
![Packagist Version](https://img.shields.io/packagist/v/hichemtab-tech/namecrement)

**Smart unique name generator for PHP**
Automatically generates a unique name by incrementing it if needed — just like `"file" → "file (1)" → "file (2)"` and so on.

---

## ✨ Features

- Generate unique names based on existing ones
- Smart gap detection (fills missing indexes first)
- Lightweight, dependency-free
- Perfect for filenames, labels, IDs, and more

---

### 📦 Also Available

* JavaScript: [Namecrement](https://github.com/HichemTab-tech/Namecrement)
* Python: [Namecrement-py](https://github.com/HichemTab-tech/Namecrement-py)

## 📦 Installation

```bash
composer require hichemtab-tech/namecrement-php
```

---

## 🚀 Usage

```php
'], '');
// ➔ 'version'
```

### 🛡 Suffix Format Rules

- The `suffixFormat` **must include** `%N%`, or an `InvalidArgumentException` will be thrown.
- `%N%` will be replaced by the next available number.
- Default format is `" (%N%)"`.

| Format Example | Result |
|-------------------|---------------------|
| `" (%N%)"` | `file (1)` |
| `-%N%` | `file-1` |
| `_` | `file_` |
| `_%N%_` | `file_1_` |

---

## 📚 API

### `namecrement(string $baseName, array $existingNames): string`

| Parameter | Type | Description |
|------------------|---------------|------------------------------------------------------|
| `baseName` | string | Proposed name to start from |
| `existingNames` | string[] | List of already existing names |
| `suffixFormat` | string | Optional format for suffix (optional) |
| `startingNumber` | `int \| null` | The starting number for incrementing (default: null) |

Returns the next available **unique name**.

---

## 🛠 Examples

```php
Namecrement::namecrement('report', ['report', 'report (1)']);
// ➔ 'report (2)'

Namecrement::namecrement('image', ['photo', 'image', 'image (1)', 'image (2)']);
// ➔ 'image (3)'

Namecrement::namecrement('new', []);
// ➔ 'new'
Namecrement::namecrement('file', ['file', 'file (1)', 'file (2)'], ' -%N%-');
// ➔ 'file -1-'

Namecrement::namecrement('file', [], startingNumber: 5);
// → 'file (5)'
```

---

## 📄 License

This project is open-source and available under the [MIT license](LICENSE).

---

## 🤝 Contributing

Contributions are welcome!
Please check out the [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.