---
title: New functions for array and map operations
description: Rulesets now support split, join, has_key, and has_value functions for advanced expression logic.
image: https://developers.cloudflare.com/changelog-preview.png
---

> Documentation Index  
> Fetch the complete documentation index at: https://developers.cloudflare.com/changelog/llms.txt  
> Use this file to discover all available pages before exploring further. 

[Skip to content](#%5Ftop) 

# Changelog

New updates and improvements at Cloudflare.

[ Subscribe to RSS ](https://developers.cloudflare.com/changelog/rss/index.xml) [ View RSS feeds ](https://developers.cloudflare.com/fundamentals/new-features/available-rss-feeds/) 

![hero image](https://developers.cloudflare.com/_astro/hero.CVYJHPAd_26AMqX.svg) 

[ ← Back to all posts ](https://developers.cloudflare.com/changelog/) 

## New functions for array and map operations

Jan 20, 2026 

[ Rules ](https://developers.cloudflare.com/rules/) 

#### New functions for array and map operations

Cloudflare Rulesets now include new functions that enable advanced expression logic for evaluating arrays and maps. These functions allow you to build rules that match against lists of values in request or response headers, enabling use cases like country-based blocking using custom headers.

---

#### New functions

| Function                 | Description                                                                   |
| ------------------------ | ----------------------------------------------------------------------------- |
| split(source, delimiter) | Splits a string into an array of strings using the specified delimiter.       |
| join(array, delimiter)   | Joins an array of strings into a single string using the specified delimiter. |
| has\_key(map, key)       | Returns true if the specified key exists in the map.                          |
| has\_value(map, value)   | Returns true if the specified value exists in the map.                        |

---

#### Example use cases

**Check if a country code exists in a header list:**

```txt
has_value(split(http.response.headers["x-allow-country"][0], ","), ip.src.country)
```

**Check if a specific header key exists:**

```txt
has_key(http.request.headers, "x-custom-header")
```

**Join array values for logging or comparison:**

```txt
join(http.request.headers.names, ", ")
```

For more information, refer to the [Functions reference](https://developers.cloudflare.com/ruleset-engine/rules-language/functions/).

```json
{"@context":"https://schema.org","@type":"BlogPosting","@id":"https://developers.cloudflare.com/changelog/post/2026-01-20-array-map-functions/#page","headline":"New functions for array and map operations · Changelog","description":"Rulesets now support split, join, has\\_key, and has\\_value functions for advanced expression logic.","url":"https://developers.cloudflare.com/changelog/post/2026-01-20-array-map-functions/","inLanguage":"en","image":"https://developers.cloudflare.com/changelog-preview.png","dateModified":"2026-01-20","datePublished":"2026-01-20","publisher":{"@type":"Organization","name":"Cloudflare","url":"https://www.cloudflare.com/"},"isPartOf":{"@type":"WebSite","@id":"https://developers.cloudflare.com/#website","name":"Cloudflare Docs","url":"https://developers.cloudflare.com/"}}
```
