以此为例,了解key,
$arr = array(
'product1'=>array('color'=>'blue','size'=>'medium'),
'product2'=>array('color'=>'green','size'=>'large'),
'product3'=>array('color'=>'yellow','size'=>'small'),
);
是否有一种方法可以通过递增的值获取多维数组中的任何键?
例如,我想获取上面$arr
中第三个数组值的键。 $arr[2]
将返回值(包含黄色/小的数组)。
有没有办法利用key
函数通过其数字迭代器获取任何键,而不是来自"当前位置的键#34;?
或者,是否有另一个内置函数,我显然会忽略它会返回$arr[2]
的键而不是它的值?
echo getkey($arr[2]);
# returns product3
答案 0 :(得分:3)
只需使用array_keys函数:
$arr = array(
'product1'=>array('color'=>'blue','size'=>'medium'),
'product2'=>array('color'=>'green','size'=>'large'),
'product3'=>array('color'=>'yellow','size'=>'small'),
);
$keys = array_keys($arr);
echo $keys[2];
// shorter version
echo array_keys($arr)[2];
答案 1 :(得分:2)
生成新的/完整的数组只是为了从中选择一个键似乎不合逻辑/有效。其他答案是“工作太辛苦”。
array_slice()
根据位置而不是键名特别提取数组的部分。这使它成为这种情况的完美功能。
更好的做法是只切掉你想要的子阵列,然后调用它的键,如下所示:
代码:(Demo)
$arr = array(
'product1'=>array('color'=>'blue','size'=>'medium'),
'product2'=>array('color'=>'green','size'=>'large'),
'product3'=>array('color'=>'yellow','size'=>'small'),
);
$key=2;
echo key(array_slice($arr,$key,1)); // [input],[0-indexed position],[number of subarrays]
输出:
product3
答案 2 :(得分:1)
您可以使用from tkinter import *
from PIL import Image, ImageTk
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.pos = []
self.master.title("GUI")
self.pack(fill=BOTH, expand=1)
self.counter = 0
menu = Menu(self.master)
self.master.config(menu=menu)
file = Menu(menu)
file.add_command(label="Exit", command=self.client_exit)
menu.add_cascade(label="File", menu=file)
analyze = Menu(menu)
analyze.add_command(label="Region of Interest",
command=self.regionOfInterest)
menu.add_cascade(label="Analyze", menu=analyze)
load = Image.open("ap41.ddr.brf.sdat.bmp")
render = ImageTk.PhotoImage(load)
img = Label(self, image=render)
img.image = render
img.place(x=0, y=0)
def regionOfInterest(self):
root.config(cursor="plus")
canvas.bind("<Button-1>", self.imgClick)
def client_exit(self):
exit()
def imgClick(self, event):
if self.counter < 3:
x = canvas.canvasx(event.x)
y = canvas.canvasy(event.y)
self.pos.append((x, y))
print(self.pos)
canvas.create_line(x - 5, y, x + 5, y, fill="red", tags="crosshair")
canvas.create_line(x, y - 5, x, y + 5, fill="red", tags="crosshair")
self.counter += 1
else:
canvas.unbind("<Button 1>")
root.config(cursor="arrow")
self.counter = 0
root = Tk()
imgSize = Image.open("ap41.ddr.brf.sdat.bmp")
tkimage = ImageTk.PhotoImage(imgSize)
w, h = imgSize.size
canvas = Canvas(root, width=w, height=h)
canvas.create_image((w/2,h/2),image=tkimage)
canvas.pack()
root.geometry("%dx%d"%(w,h))
app = Window(root)
root.mainloop()
功能:
array_keys()