Reference - Data handling - where


App: classicModels - Page: options
PHP
HTML
options.pad
Result
<p>where: {offices where="country = 'USA'", order='officeCode'}{$officeCode},{/offices}</p>
<p>distinct: {offices distinct, fields='country', order='country'}{$country},{/offices}</p>
<p>distinctrow: {offices distinctrow, fields='country', order='country'}{$country},{/offices}</p>
<p>group: {payments fields='customerNumber, count(*) as cnt', group='customerNumber', having='cnt > 9', order='customerNumber'}{$customerNumber}={$cnt},{/payments}</p>
<p>rollup: {offices key='', fields='count(*) as cnt', group='country', rollup}{last@offices}{$cnt}{/last@offices}{/offices}</p>
<p>db: {sales db='employees', where="jobTitle = 'President'"}{$lastName}{/sales}</p>
<p>key: {offices key='city', where="country = 'USA'"}{$city},{/offices}</p>
<p>union: {offices where="officeCode = 1", union='offices'}{$officeCode},{/offices}</p>
<p>join: {employees join='offices on employees.officeCode = offices.officeCode', where="offices.city = 'Boston'", order='lastName'}{$lastName},{/employees}</p>
<p>htmlAttrJson: {select:offices htmlAttrJson='record', fields='officeCode', where="officeCode = 1"}</p>


App: manual - Page: fragments/expressions_2
PHP
HTML
fragments/expressions_2.pad
Result
{data 'stock'}
[ {"item": "pen", "qty": 12}, {"item": "ink", "qty": 0}, {"item": "pad", "qty": 5} ]
{/data}
{stock where='$qty gt 0', %order = 20 - $qty}
<p>{$item}: {$qty} in stock, order {$order}</p>
{/stock}


App: manual - Page: fragments/expressions_29
PHP
HTML
fragments/expressions_29.pad
Result
{data 'orders'}
[ {"nr": 1, "state": "paid", "customer": "Ada"},
{"nr": 2, "state": "cancelled", "customer": "Alan"},
{"nr": 3, "state": "sent", "customer": "Bob"},
{"nr": 4, "state": "sent", "customer": "Alice"} ]
{/data}
{orders where='$state not in ("cancelled", "refunded") and $customer like "A%"'}
<p>{$nr}: {$customer}, {$state}</p>
{/orders}


App: manual - Page: miscellaneous/handling


App: regression/errors - Page: error/demand_after_handling_left_no_row
PHP
HTML
error/demand_after_handling_left_no_row.pad
Result
{data 'xs'}
[1,2,3]
{/data}
{xs where='$xs gt 5', demand}
{$xs},
{/xs}


App: regression/errors - Page: syntax/a_bare_name_spliced_far_into_a_long_where_is_refused
PHP
syntax/a_bare_name_spliced_far_into_a_long_where_is_refused.php
HTML
syntax/a_bare_name_spliced_far_into_a_long_where_is_refused.pad
Result
<?php

// A value that calls a function by its bare name - strlen 5, no ( and no : - spliced into a
// where= past the window the splice looks back over is refused as part of the condition, as
// one with php:abs(-3) is: only a value with a (, a $ or a : in it was kept, and this one
// ran PHP's strlen and let every row pass.

$q = '3 or strlen 5 eq 1';

?>
{data 'xs'}[{"n":1},{"n":3}]{/data}{xs where='$n eq 1 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or $n eq {$q}'}{$n} {/xs}


App: regression/errors - Page: syntax/a_comma_outside_brackets_in_a_where_is_reported
PHP
HTML
syntax/a_comma_outside_brackets_in_a_where_is_reported.pad
Result
{data 'people'}[{"name":"Ann","dept":"IT"},{"name":"Bob","dept":"Sales"},{"name":"Cy","dept":"HR"}]{/data}{people where='$dept in "IT", "HR"'}{$name} {/people}


App: regression/errors - Page: syntax/a_value_spliced_far_into_a_long_where_is_refused
PHP
syntax/a_value_spliced_far_into_a_long_where_is_refused.php
HTML
syntax/a_value_spliced_far_into_a_long_where_is_refused.pad
Result
<?php

// A value spliced into a where= more than 4 KB from the tag's opening brace - past the window
// the splice looks back over - is refused as part of the condition: it went in bare and
// unrecorded, and the request value 3 or php:abs(-3) eq 3 ran PHP and let every row pass.

$q = '3 or php:abs(-3) eq 3';

?>
{data 'xs'}[{"n":1},{"n":3}]{/data}{xs where='$n eq 1 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or 0 or $n eq {$q}'}{$n} {/xs}


App: regression/errors - Page: syntax/a_where_is_written_in_the_template
PHP
syntax/a_where_is_written_in_the_template.php
HTML
syntax/a_where_is_written_in_the_template.pad
Result
<?php

// A whole where= condition from a variable - a request could fill it - is refused.

$cond = 'php:abs(-1) eq $n';

?>
{data 'xs'}[{"n":1},{"n":2}]{/data}{xs where=$cond}{$n}{/xs}


App: regression/errors - Page: syntax/negative_cannot_turn_round_a_select_where
PHP
syntax/negative_cannot_turn_round_a_select_where.php
HTML
syntax/negative_cannot_turn_round_a_select_where.pad
Result
<?php

// negative over a select table's where: the SQL applied it, so nothing was left to turn
// round and the list came out empty, in silence.

$padSelect ['staffSel'] = [ 'db' => 'staff' ];

?>
{staffSel where="salary >= 2000", negative}{$name}{/staffSel}


App: regression/framework - Page: custom/an_application_tag_reads_its_options_as_the_template_gave_them
PHP
custom/an_application_tag_reads_its_options_as_the_template_gave_them.php
HTML
custom/an_application_tag_reads_its_options_as_the_template_gave_them.pad
Result
<?php $v = 'a|b'; ?>
[{batches where='$batches | upper eq "C"'}{$batches}{/batches}][{jsonparm '{"a":"x"}'}]{plaincard title='a|b'}{plaincard title=$v}{phpcard title=$v}


App: regression/framework - Page: data/a_csv_row_shorter_than_its_header_has_the_missing_fields_empty
PHP
data/a_csv_row_shorter_than_its_header_has_the_missing_fields_empty.php
HTML
data/a_csv_row_shorter_than_its_header_has_the_missing_fields_empty.pad
Result
<?php

// A CSV row with fewer cells than the header - a trailing empty cell left out, as a
// spreadsheet export does - has every header field, the missing ones empty: Bob's row had
// no city, so {$city} on it found the page's own $city, and with no such variable the
// page ended "Field '$c' not found".

$city = 'the page city';

?>
{data 'people'}
name,city
Ann,Paris
Bob
{/data}{data 'c2'}
a,b,c
1,2
3,4,5
{/data}[{people}<{$name} lives in {$city}>{/people}][{c2}{$a}{$b}({$c}){/c2}][{people where='$city eq ""'}{$name}{/people}]


App: regression/framework - Page: data/a_list_of_objects_iterates_as_rows_with_their_fields
PHP
data/a_list_of_objects_iterates_as_rows_with_their_fields.php
HTML
data/a_list_of_objects_iterates_as_rows_with_their_fields.pad
Result
<?php

$decoded
= json_decode ( '[{"a":1,"b":"x"},{"a":2,"b":"y"}]' );
$people = [ (object) [ 'name' => 'P1', 'age' => 30 ], (object) [ 'name' => 'P2', 'age' => 40 ] ];
$nested = json_decode ( '[{"addr":{"city":"Paris"},"tags":[{"t":1},{"t":2}]}]' );
$dates = [ new DateTimeImmutable ( '2026-01-02 03:04:05', new DateTimeZone ( 'UTC' ) ) ];

?>
{decoded}{$a}{/decoded}|{decoded where='$a gt 1'}{$b}{/decoded}|{decoded}{if $a eq 2}two{/if}{/decoded}|{decoded sort='b DESC'}{$b}{/decoded}|{people}({$name}){/people}|{nested}{$addr.city}:{tags}{$t}{/tags}{/nested}|{dates}{$dates} {/dates}


App: regression/framework - Page: data/data_named_at_its_close_holds_the_values_not_their_stand_ins
PHP
data/data_named_at_its_close_holds_the_values_not_their_stand_ins.php
HTML
data/data_named_at_its_close_holds_the_values_not_their_stand_ins.pad
Result
<?php

// A {data} named on its closing tag parses its walked content, in which a value's
// syntax characters travel as stand-ins - a spliced comma splits no CSV cell, a quote
// closes no JSON string. The parsed fields kept them: "Smith, John" was stored with the
// comma's stand-in, so {if}, where= and php: calls compared and measured another string.

$people = [ [ 'name' => 'Smith, John' ], [ 'name' => 'x=1' ], [ 'name' => 'say "hi"' ] ];

?>
{data}
name
{people}"{!name}"
{/people}
{/data 'p'}{data}[{people}{notFirst@people},{/notFirst@people}{"n":"{!name}"}{/people}]{/data 'q'}A[{p}{if $name eq 'Smith, John'}eq{else}ne{/if};{/p}]B[{p where='$name eq "x=1"'}{$name}@else@none{/p}]C[{q}{echo php:strlen($n)};{/q}]


App: regression/framework - Page: expressions/a_field_piped_into_a_fallback_may_be_missing_in_echo_too
PHP
expressions/a_field_piped_into_a_fallback_may_be_missing_in_echo_too.php
HTML
expressions/a_field_piped_into_a_fallback_may_be_missing_in_echo_too.pad
Result
<?php

// A field piped into a fallback - default(), ??, optional - may be missing under the strict
// check in {echo} and inside an expression too, not only in {$x | ...}: they named it missing.

$user = [ 'name' => 'Ann' ];
$xs = [ [ 'n' => 1 ], [ 'n' => 2, 'm' => 5 ] ];

?>
[{echo $user.middle | default("-")}][{echo $user.middle | ?? "-"}][{echo $user.middle | optional}][{echo $user.name | default("-")}] {xs where='$m | ?? 0 | @ gt 1'}{$n}{/xs}