如何通过搜索偏移值来获取关联数组的键?

时间:2017-07-25 19:28:08

标签: php arrays multidimensional-array key associative-array

以此为例,了解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

3 个答案:

答案 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];

更多信息:http://php.net/manual/en/function.array-keys.php

答案 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()