มีวิธีทำบางอย่างเช่น PHPs $array[] = 'foo';
ในการทุบตีเทียบกับการทำ:
array[0]='foo'
array[1]='bar'
มีวิธีทำบางอย่างเช่น PHPs $array[] = 'foo';
ในการทุบตีเทียบกับการทำ:
array[0]='foo'
array[1]='bar'
คำตอบ:
ใช่นั่นคือ:
ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')
ในบริบทที่คำสั่งการมอบหมายกำลังกำหนดค่าให้กับตัวแปรเชลล์หรือดัชนีอาเรย์ (ดูที่อาร์เรย์) สามารถใช้ตัวดำเนินการ '+ =' เพื่อผนวกหรือเพิ่มค่าก่อนหน้าของตัวแปร
ARRAY
เป็นเพียงตัวยึดตำแหน่งสำหรับชื่อตัวแปรจริง แม้ว่าดัชนีอาเรย์ของคุณจะไม่เรียงลำดับ แต่การผนวกด้วย+=
ก็จะกำหนดให้กับดัชนีสูงสุด + 1
${myarray[@]}
- การอ้างอิงตัวแปรอาร์เรย์ราวกับว่ามันเป็นสเกลาร์นั้นเหมือนกับการเข้าถึงองค์ประกอบ 0 ในคำอื่น ๆ : เป็นเช่นเดียวกับ$myarray
${myarray[0]}
ดังที่Dumb Guyชี้ให้เห็นสิ่งสำคัญคือต้องทราบว่าอาร์เรย์เริ่มต้นที่ศูนย์และเรียงตามลำดับหรือไม่ เนื่องจากคุณสามารถกำหนดและยกเลิกการตั้งค่าดัชนีที่${#array[@]}
ไม่ต่อเนื่องกันได้จึงไม่ใช่รายการถัดไปในตอนท้ายของอาร์เรย์
$ array=(a b c d e f g h)
$ array[42]="i"
$ unset array[2]
$ unset array[3]
$ declare -p array # dump the array so we can see what it contains
declare -a array='([0]="a" [1]="b" [4]="e" [5]="f" [6]="g" [7]="h" [42]="i")'
$ echo ${#array[@]}
7
$ echo ${array[${#array[@]}]}
h
นี่คือวิธีรับดัชนีล่าสุด:
$ end=(${!array[@]}) # put all the indices in an array
$ end=${end[@]: -1} # get the last one
$ echo $end
42
นั่นแสดงให้เห็นถึงวิธีการรับองค์ประกอบสุดท้ายของอาร์เรย์ คุณมักจะเห็นสิ่งนี้:
$ echo ${array[${#array[@]} - 1]}
g
อย่างที่คุณเห็นเพราะเรากำลังยุ่งกับอาร์เรย์กระจัดกระจายนี่ไม่ใช่องค์ประกอบสุดท้าย วิธีนี้ใช้ได้ทั้งในเบาบางและต่อเนื่องกันแม้ว่า:
$ echo ${array[@]: -1}
i
${array[@]: start[:count]}
ส่งคืนการนับ elems หรือหากไม่ได้ระบุทั้งหมดที่เหลือ elems เริ่มต้นที่องค์ประกอบต่อไปนี้: - หากเริ่มต้น> = 0: จากองค์ประกอบอื่น ดัชนีของใครคือ> = เริ่ม - ถ้าเริ่ม <0: จาก elem ซึ่งมีดัชนีคือ (ดัชนีอาร์เรย์สุดท้าย + 1) - abs (เริ่มต้น); ถ้ำ: ถ้า abs (start)> (ดัชนีอาร์เรย์สุดท้าย + 1) สตริงว่างจะถูกส่งคืน หากมีการระบุการนับองค์ประกอบจะถูกส่งคืนแม้ว่าดัชนีของพวกเขาจะไม่ต่อเนื่องกันตั้งแต่เริ่มต้น
${array[-1]}
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest
arr=("${arr[@]}" "new")
ถ้าคุณมีองค์ประกอบที่มีช่องว่างในนั้น
หากอาร์เรย์ของคุณเรียงตามลำดับเสมอและเริ่มต้นที่ 0 คุณสามารถทำได้ดังนี้:
array[${#array[@]}]='foo'
# gets the length of the array
${#array_name[@]}
หากคุณใช้ช่องว่างระหว่างเครื่องหมายเท่ากับ:
array[${#array[@]}] = 'foo'
จากนั้นคุณจะได้รับข้อผิดพลาดคล้ายกับ:
array_name[3]: command not found
+=
ไวยากรณ์ (ดูคำตอบของ @ e-t172) คือ (a) ง่ายขึ้นและ (b) ยังทำงานกับอาร์เรย์ที่ไม่ต่อเนื่องกันและ / หรือไม่เริ่มต้นด้วย 0
+=
อีกด้วยเช่นเพิ่มก่อนเช่นรุ่นที่ 2
$arr += ($el)
ดูเหมือนจะแบ่งสตริงโดยช่องว่างและเพิ่มแต่ละองค์ประกอบ
ด้วยอาร์เรย์ที่จัดทำดัชนีคุณสามารถทำสิ่งนี้:
declare -a a=()
a+=('foo' 'bar')