UNPKG

locutus

Version:

Locutus other languages' standard libraries to JavaScript for fun and educational purposes

46 lines (45 loc) 1.67 kB
import { toPhpArrayObject } from "../_helpers/_phpTypes.js"; export function array_walk(array, funcname, userdata) { // discuss at: https://locutus.io/php/array_walk/ // original by: Johnny Mast (https://www.phpvrouwen.nl) // bugfixed by: David // improved by: Brett Zamir (https://brett-zamir.me) // note 1: Only works with user-defined functions, not built-in functions like void() // example 1: array_walk ([3, 4], function () {}, 'userdata') // returns 1: true // example 2: array_walk ('mystring', function () {}) // returns 2: false // example 3: array_walk ({"title":"my title"}, function () {}) // returns 3: true if (!array || typeof array !== 'object') { return false; } try { const hasUserdata = typeof userdata !== 'undefined'; const callback = funcname; if (Array.isArray(array)) { for (const [index, value] of array.entries()) { if (hasUserdata) { Reflect.apply(callback, undefined, [value, index, userdata]); } else { Reflect.apply(callback, undefined, [value, index]); } } return true; } const target = toPhpArrayObject(array); for (const [key, value] of Object.entries(target)) { if (hasUserdata) { Reflect.apply(callback, undefined, [value, key, userdata]); } else { Reflect.apply(callback, undefined, [value, key]); } } } catch (_e) { return false; } return true; }