Excerpt | ||
---|---|---|
| ||
forEach($var, set, script) Iterates over an Array or Recordset and processes a script for each entry. |
Function: forEach()
Iterates over an Array or Recordset and processes a script for each entry.
Syntax
forEach($var, set, script)
Argument | Type | Description |
---|---|---|
$var | $-Variable | A $-Variable which will be set to each item in set in turn before script is processed. |
set | Array or Recordset | The set of items which will be iterated over. |
script | $-Variable | A comma separated list of Expressions which will be processed once for each entry in set. |
forEach() is like every other function in that it returns a value. In this case the value returned is an Array of the results of running script for each entry in set. Note that the result of running the script is the value of the last script item to be processed before the the next iteration.
Examples
...
- Its return value is the last statement executed in the last iteration.
- All the $-variables used in the call to forEach() keep their values between iterations.
- All the $-variables used in the call to forEach() will be available after it has returned.
Examples
In the first two examples, let
$numberList = [1,2,3,4,5,6,7,8,9,10]
Code Block |
---|
forEach($number, $numberList,
$currentValue = $number
), |
Returns 10, as forEach() returns the value of the final expression to be evaluated in its final iteration.
Code Block |
---|
forEach($number, $numberList,
$sumOfNumbers = $sumOfNumbers + $number
)
|
Returns 55, as the variable $sumOfNumbers persists in-between forEach iterations.
Detailed example: (step-by-step)
Code Block |
---|
forEach( $customerType, customers.type, $total = $total + 1, if( $customerType == "Business", continue() ), $nonBusiness = $nonBusiness + 1, subString($customerType, 1, 6) ) |
All entries after the second parameter of the above forEach() comprise the script that will be processed for each entry in customers.type. Processing is as follows:
...
The forEach() function above therefore returns an Array of the first 6 characters of each non business customer type in the supplied list. The values of $total (a count of all customer types), $nonBusiness (a count of all non-business customer types) and $customerType (the last customer type processed) will be available to subsequent Attribute Expressions for the current Stream Item calculation.
Commonly, you will might not want to return a list from forEach(), but calculate some values in the loop to use later. For example, if you had an attribute TotalCustNumber, you might create an attribute expression:
Code Block |
---|
do( forEach( $customerType, customers.type, $total = $total + 1, if( $customerType == "Business", continue() ), $nonBusiness = $nonBusiness + 1 ), $total ) |
This would calculate the total number of customers (in $total) and write this value to the attribute.
Then the next attribute might be NonBusinessCustNumber, and you could write the number of non-business customers calculated in the loop to this attribute simply using the expression:
$nonBusiness