1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-12 09:44:38 +02:00

Correction to previous commit

This commit is contained in:
Ryan Cramer
2021-11-19 14:26:00 -05:00
parent 8e1608ac6f
commit 86498bdc54

View File

@@ -575,46 +575,48 @@ class WireArray extends Wire implements \IteratorAggregate, \ArrayAccess, \Count
if(isset($this->data[$key])) return $this->data[$key]; if(isset($this->data[$key])) return $this->data[$key];
// check if key contains something other than numbers, letters, underscores, hyphens // check if key contains something other than numbers, letters, underscores, hyphens
if(is_string($key) && !ctype_alnum($key) && !ctype_alnum(strtr($key, '-_', 'ab'))) { if(is_string($key)) {
if(!ctype_alnum($key) && !ctype_alnum(strtr($key, '-_', 'ab'))) {
// check if key contains a selector
if(Selectors::stringHasSelector($key)) {
$item = $this->findOne($key);
if($item === false) $item = null;
return $item;
}
if(strpos($key, '{') !== false && strpos($key, '}')) { // check if key contains a selector
// populate a formatted string with {tag} vars if(Selectors::stringHasSelector($key)) {
return wirePopulateStringTags($key, $this); $item = $this->findOne($key);
} if($item === false) $item = null;
return $item;
// check if key is requesting a property array: i.e. "name[]" }
if(strpos($key, '[]') !== false && substr($key, -2) == '[]') {
return $this->explode(substr($key, 0, -2)); if(strpos($key, '{') !== false && strpos($key, '}')) {
} // populate a formatted string with {tag} vars
return wirePopulateStringTags($key, $this);
// check if key is asking for first match in "a|b|c" }
if(strpos($key, '|') !== false) {
$numericKeys = $this->usesNumericKeys(); // check if key is requesting a property array: i.e. "name[]"
foreach(explode('|', $key) as $k) { if(strpos($key, '[]') !== false && substr($key, -2) == '[]') {
if(isset($this->data[$k])) { return $this->explode(substr($key, 0, -2));
$match = $this->data[$k]; }
} else if($numericKeys) {
$match = $this->getItemThatMatches('name', $k); // check if key is asking for first match in "a|b|c"
} if(strpos($key, '|') !== false) {
if($match) break; $numericKeys = $this->usesNumericKeys();
foreach(explode('|', $key) as $k) {
if(isset($this->data[$k])) {
$match = $this->data[$k];
} else if($numericKeys) {
$match = $this->getItemThatMatches('name', $k);
}
if($match) break;
}
return $match;
} }
return $match;
} }
// if the WireArray uses numeric keys, then it's okay to // if the WireArray uses numeric keys, then it's okay to
// match a 'name' field if the provided key is a string // match a 'name' field if the provided key is a string
if($this->usesNumericKeys()) { if(is_string($key) && $this->usesNumericKeys()) {
$match = $this->getItemThatMatches('name', $key); $match = $this->getItemThatMatches('name', $key);
} }
} }
return $match; return $match;
} }