PHPackages                             bkuhl/bible-bowl-texts - 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. bkuhl/bible-bowl-texts

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

bkuhl/bible-bowl-texts
======================

A PHP library for managing Bible quiz text by seasons and blocks

2026.2.0(2w ago)0996↓69.2%MITPHPPHP ^8.1CI passing

Since Aug 15Pushed 2w agoCompare

[ Source](https://github.com/bkuhl/bible-bowl-texts)[ Packagist](https://packagist.org/packages/bkuhl/bible-bowl-texts)[ RSS](/packages/bkuhl-bible-bowl-texts/feed)WikiDiscussions main Synced 3d ago

READMEChangelog (7)Dependencies (6)Versions (10)Used By (0)

Bible Bowl Texts
================

[](#bible-bowl-texts)

A PHP library for managing Bible quiz text by seasons and blocks. This library generates and manages JSON files representing study text for Bible quiz programs, with easy access to the entire season's text and smaller segments called "blocks." Supports multiple programs (Team and Beginner) with different text ranges and memory verses.

Features
--------

[](#features)

- **Multi-Program Support**: Separate data for Team and Beginner programs
- **Memory Verses**: Support for memory verse collections with book, chapter, and verse references
- **Efficient JSON Format**: Compatible with the [`bkuhl/scripture-ranges`](https://github.com/bkuhl/scripture-ranges) package format
- **Multi-Book Support**: Can handle ranges spanning multiple books
- **Direct Block Access**: Blocks are stored as objects keyed by number for O(1) lookup
- **Concise Chapter Ranges**: Uses efficient chapter ranges (e.g., 16-24) instead of individual chapters
- **Factory Pattern**: Easy instantiation of season and block data by ID or name

Installation
------------

[](#installation)

```
composer require bkuhl/bible-bowl-texts
```

Usage
-----

[](#usage)

```
use BKuhl\BibleBowlTexts\SeasonFactory;

$factory = new SeasonFactory();

// Get season by ID (defaults to null program)
$season = $factory->getSeasonById('16');
echo $season->getName(); // "2025 Fall"

// Get season by ID for specific program
$defaultSeason = $factory->getSeasonById('16');
$beginnerSeason = $factory->getSeasonById('16', SeasonFactory::PROGRAM_BEGINNER);

// Get season by name
$season = $factory->getSeasonByName('2025 Fall');

// Get all seasons for a program
$allDefaultSeasons = $factory->getAllSeasons();
$allBeginnerSeasons = $factory->getAllSeasons(SeasonFactory::PROGRAM_BEGINNER);

// Get a specific block
$block = $factory->getBlock('16', 1);
echo $block['number']; // 1

// Get memory verses (explicit structure)
$memoryVerses = $factory->getMemoryVerses('16');
$chapter16Verses = $memoryVerses['books']['9']['chapters']['16']['verses']; // [1, 7, 13, 18]

// Get memory verses (flattened structure)
$memoryVersesFlattened = $factory->getMemoryVersesFlattened('16');
foreach ($memoryVersesFlattened as $verse) {
    echo "Book: {$verse['book']}, Chapter: {$verse['chapter']}, Verse: {$verse['verse']}";
}
```

Data Structure
--------------

[](#data-structure)

### Directory Layout

[](#directory-layout)

```
data/
├── 16.json              # Team program data
└── beginner/
    └── 16.json          # Beginner program data

```

### JSON Structure

[](#json-structure)

The library generates efficient JSON files with the following structure:

```
{
    "id": "16",
    "name": "2025 Fall",
    "text": {
        "ranges": [
            {
                "start": {
                    "book": 9,
                    "chapter": 16
                },
                "end": {
                    "book": 9,
                    "chapter": 24
                }
            },
            {
                "start": {
                    "book": 9,
                    "chapter": 26
                },
                "end": {
                    "book": 9,
                    "chapter": 31
                }
            }
        ]
    },
    "blocks": {
        "1": {
            "ranges": [
                {
                    "start": {
                        "book": 9,
                        "chapter": 16
                    },
                    "end": {
                        "book": 9,
                        "chapter": 19
                    }
                }
            ]
        },
        "2": {
            "ranges": [
                {
                    "start": {
                        "book": 9,
                        "chapter": 20
                    },
                    "end": {
                        "book": 9,
                        "chapter": 24
                    }
                }
            ]
        },
        "3": {
            "ranges": [
                {
                    "start": {
                        "book": 9,
                        "chapter": 26
                    },
                    "end": {
                        "book": 9,
                        "chapter": 31
                    }
                }
            ]
        }
    },
    "memory_verses": {
        "books": {
            "9": {
                "chapters": {
                    "16": {
                        "verses": [1, 7, 13, 18]
                    },
                    "17": {
                        "verses": [26, 36, 37, 45, 46, 47, 50]
                    },
                    "18": {
                        "verses": [12, 30]
                    }
                }
            }
        }
    }
}
```

### Key Features of the JSON Format:

[](#key-features-of-the-json-format)

- **Multi-Program Support**: Separate JSON files for Team and Beginner programs
- **Memory Verses**: Explicit structure with books → chapters → verses hierarchy
- **Efficient Chapter Ranges**: Uses single range objects for multi-chapter spans (e.g., chapters 16-24)
- **Multi-Book Support**: Can represent ranges spanning multiple books
- **Direct Block Access**: Blocks are keyed by number (`"1"`, `"2"`, `"3"`) for O(1) lookup
- **ScriptureRanges Compatible**: Uses the `BKuhl\ScriptureRanges` composer package for range building

Programs
--------

[](#programs)

### Team Program

[](#team-program)

The default program with full text coverage and comprehensive memory verses.

### Beginner Program

[](#beginner-program)

A simplified program with reduced text coverage and fewer memory verses, stored in the `data/beginner/` directory.

Current Season Data
-------------------

[](#current-season-data)

### Season 16: 2025 Fall

[](#season-16-2025-fall)

#### Team Program

[](#team-program-1)

- **Text**: 1 Samuel 16-31 (without chapter 25)
- **Block 1**: 1 Samuel 16-19
- **Block 2**: 1 Samuel 20-24
- **Block 3**: 1 Samuel 26-31
- **Memory Verses**: 3 verses (1 Samuel 16:7, 17:45, 18:3)

#### Beginner Program

[](#beginner-program-1)

- **Text**: 1 Samuel 16-20
- **Block 1**: 1 Samuel 16-18
- **Block 2**: 1 Samuel 19-20
- **Memory Verses**: 2 verses (1 Samuel 16:7, 17:45)

Generating Season Data
----------------------

[](#generating-season-data)

Use the included script to generate new season data:

```
php scripts/generate-season-data.php
```

This script uses the `bkuhl/scripture-ranges` package to build proper range objects with:

- `ChapterRange` objects for efficient multi-chapter spans
- No manual verse specification (whole chapters automatically handled)
- Book objects from `bkuhl/bible-csb` package

Testing
-------

[](#testing)

```
composer test
```

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

[](#requirements)

- PHP 8.1+
- Compatible with `bkuhl/scripture-ranges` package format

License
-------

[](#license)

MIT

###  Health Score

46

—

FairBetter than 92% of packages

Maintenance96

Actively maintained with recent releases

Popularity19

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 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 ~51 days

Recently: every ~59 days

Total

7

Last Release

17d ago

Major Versions

1.0.0 → 2025.2.12025-10-23

2025.2.4 → 2026.1.02025-12-21

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/524933?v=4)[Ben Kuhl](/maintainers/bkuhl)[@bkuhl](https://github.com/bkuhl)

---

Top Contributors

[![bkuhl](https://avatars.githubusercontent.com/u/524933?v=4)](https://github.com/bkuhl "bkuhl (8 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/bkuhl-bible-bowl-texts/health.svg)

```
[![Health](https://phpackages.com/badges/bkuhl-bible-bowl-texts/health.svg)](https://phpackages.com/packages/bkuhl-bible-bowl-texts)
```

###  Alternatives

[prismjs/prism

Lightweight, robust, elegant syntax highlighting. A spin-off project from Dabblet.

13.0k70.6k4](/packages/prismjs-prism)[wwwision/import-service

Generic service for importing data from different sources to configurable targets such as the Neos Content Repository or an arbitrary database table

1011.0k](/packages/wwwision-import-service)

PHPackages © 2026

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