# Preferences input directly into an Array?

**URL:** <https://community.smartthings.com/t/preferences-input-directly-into-an-array/4305>\
**Category:** Writing SmartApps\
**Created:** [August 19, 2014, 1:35pm UTC](https://community.smartthings.com/t/preferences-input-directly-into-an-array/4305 "2014-08-19T13:35:50Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![storageanarchy](https://yyz2.discourse-cdn.com/smartthings/user_avatar/community.smartthings.com/storageanarchy/32/100139_2.png) [@storageanarchy](https://community.smartthings.com/u/storageanarchy)\
**Post date:** [August 19, 2014, 1:35pm UTC](https://community.smartthings.com/t/preferences-input-directly-into-an-array/4305/1 "2014-08-19T13:35:50Z")

</div>

Does anyone know of a better way to get a list of entries collected in a preferences page into an Array?

input name: “userNames[1]” creates a variable named settings.userNames[1] and not an array.

This works, but it’s messy as it creates 30 settings variables in addition to the state.userNames array. **Anyone have a better solution?**

```
    def usersPage() {
    dynamicPage(name:"usersPage", title: "User / Code List", uninstall: true, install: true) {
    
        section("User Names/Identifiers (1-10)") {
// log.trace "User Names"
            input name: "user1", title: "Code #1 Name", type: string, multiple: false, required: false
            input name: "user2", title: "Code #2 Name", type: string, multiple: false, required: false
            input name: "user3", title: "Code #3 Name", type: string, multiple: false, required: false
            input name: "user4", title: "Code #4 Name", type: string, multiple: false, required: false
            input name: "user5", title: "Code #5 Name", type: string, multiple: false, required: false
            input name: "user6", title: "Code #6 Name", type: string, multiple: false, required: false
            input name: "user7", title: "Code #7 Name", type: string, multiple: false, required: false
            input name: "user8", title: "Code #8 Name", type: string, multiple: false, required: false
            input name: "user9", title: "Code #9 Name", type: string, multiple: false, required: false
            input name: "user10", title: "Code #10 Name", type: string, multiple: false, required: false 
        }
        
        section("User Names/Identifiers (11-20)") {
            input name: "user11", title: "Code #11 Name", type: string, multiple: false, required: false
            input name: "user12", title: "Code #12 Name", type: string, multiple: false, required: false
            input name: "user13", title: "Code #13 Name", type: string, multiple: false, required: false
            input name: "user14", title: "Code #14 Name", type: string, multiple: false, required: false
            input name: "user15", title: "Code #15 Name", type: string, multiple: false, required: false
            input name: "user16", title: "Code #16 Name", type: string, multiple: false, required: false
            input name: "user17", title: "Code #17 Name", type: string, multiple: false, required: false
            input name: "user18", title: "Code #18 Name", type: string, multiple: false, required: false
            input name: "user19", title: "Code #19 Name", type: string, multiple: false, required: false
            input name: "user20", title: "Code #20 Name", type: string, multiple: false, required: false 
        }
        
        section("User Names/Identifiers (21-30)") {
            input name: "user21", title: "Code #21 Name", type: string, multiple: false, required: false
            input name: "user22", title: "Code #22 Name", type: string, multiple: false, required: false
            input name: "user23", title: "Code #23 Name", type: string, multiple: false, required: false
            input name: "user24", title: "Code #24 Name", type: string, multiple: false, required: false
            input name: "user25", title: "Code #25 Name", type: string, multiple: false, required: false
            input name: "user26", title: "Code #26 Name", type: string, multiple: false, required: false
            input name: "user27", title: "Code #27 Name", type: string, multiple: false, required: false
            input name: "user28", title: "Code #28 Name", type: string, multiple: false, required: false
            input name: "user29", title: "Code #29 Name", type: string, multiple: false, required: false
            input name: "user30", title: "Code #30 Name", type: string, multiple: false, required: false 
        }
        state.userNames = "[${user1}, ${user2}, ${user3}, ${user4}, ${user5}, ${user6}, ${user7}, ${user8}, ${user9}, ${user10}, ${user11}, ${user12}, ${user13}, ${user14}, ${user15}, ${user16}, ${user17}, ${user18}, ${user19}, ${user20}, ${user21}, ${user22}, ${user23}, ${user24}, ${user25}, ${user26}, ${user27}, ${user28}, ${user29}, ${user30}]"
    } 
}
```

---

<div class="post-metadata">

**Author:** ![pstuart](https://yyz2.discourse-cdn.com/smartthings/user_avatar/community.smartthings.com/pstuart/32/82936_2.png) [@pstuart](https://community.smartthings.com/u/pstuart)\
**Post date:** [August 19, 2014, 1:53pm UTC](https://community.smartthings.com/t/preferences-input-directly-into-an-array/4305/2 "2014-08-19T13:53:59Z")

</div>

Since Settings is already an Array why not just do a for loop to create the input values?

ex.

`section("1-20") { for(int i = 0; i < 20; i++) { input name: "user$i", title: "Code #$i Name", type: string, multiple: false, required: false }`

Then just access the settings properties where settings contains user\* and loop through those.

`settings.each  
}

---

<div class="post-metadata">

**Author:** ![storageanarchy](https://yyz2.discourse-cdn.com/smartthings/user_avatar/community.smartthings.com/storageanarchy/32/100139_2.png) [@storageanarchy](https://community.smartthings.com/u/storageanarchy)\
**Post date:** [August 19, 2014, 6:50pm UTC](https://community.smartthings.com/t/preferences-input-directly-into-an-array/4305/3 "2014-08-19T18:50:03Z")

</div>

That will work, I guess, but it still creates 30 individual variables. I’m trying to get to:

```
"Door opened by ${userNames[data.usedCode]}"

```

While I can figure how to use your method to accomplish this, since the IDE doesn’t scroll long pages when you look at the details on a SmartApp, I really am trying to avoid having 30 individual variables.

Is there no way to read these directly into an array?

---

<div class="post-metadata">

**Author:** ![pstuart](https://yyz2.discourse-cdn.com/smartthings/user_avatar/community.smartthings.com/pstuart/32/82936_2.png) [@pstuart](https://community.smartthings.com/u/pstuart)\
**Post date:** [August 20, 2014, 12:21am UTC](https://community.smartthings.com/t/preferences-input-directly-into-an-array/4305/4 "2014-08-20T00:21:05Z")

</div>

pseudo code, but essentially its:

`  
def usercodes = settings.findAll { it.name.contains(“user”) }  
def userName = usercodes.findAll { it.name = $codeentered }

log.debug “Door opened by $userName[0].value”  
`

There are a few examples of exactly how to do this in the devicetype examples in the IDE.

---

<div class="post-metadata">

**Author:** ![scottinpollock](https://yyz2.discourse-cdn.com/smartthings/user_avatar/community.smartthings.com/scottinpollock/32/67273_2.png) [@scottinpollock](https://community.smartthings.com/u/scottinpollock)\
**Post date:** [August 20, 2014, 11:30pm UTC](https://community.smartthings.com/t/preferences-input-directly-into-an-array/4305/5 "2014-08-20T23:30:18Z")

</div>

> [@pstuart](#):
>
> Since Settings is already an Array why not just do a for loop to create the input values?
> 
> ex.
> 
> section(“1-20”) {for(int i = 0; i \< 20; i++) {input name: “user$i”, title: “Code #$i Name”, type: string, multiple: false, required: false}
> 
> Then just access the settings properties where settings contains user\* and loop through those.

This breaks the sim, but would like to continue to explore a way to ask the user for a variable number of multiple entries (either text or number). ‘multiple:true’ seems to not offer this with these data types.

---

<div class="post-metadata">

**Author:** ![anderssv](https://avatars.discourse-cdn.com/v4/letter/a/90db22/32.png) [@anderssv](https://community.smartthings.com/u/anderssv)\
**Post date:** [January 22, 2017, 7:52pm UTC](https://community.smartthings.com/t/preferences-input-directly-into-an-array/4305/6 "2017-01-22T19:52:44Z")

</div>

How far did you get on this? 🙂 I’d like to do something similar and let users add stuff dynamically… 🙂
