2010-06-17 130 views
3
array(
    [0] 
     name => 'joe' 
     size => 'large' 
    [1] 
     name => 'bill' 
     size => 'small' 

访问数组元素

我觉得我被厚,但要获得一个数组元素的属性,如果我知道的关键之一的价值,我首先通过循环要找到合适的元素。

foreach($array as $item){ 
    if ($item['name'] == 'joe'){ 
     #operations on $item 
    } 
} 

我知道这可能是非常差,但我是相当新的,正在寻找一种方法来直接访问该元素的价值。或者我需要钥匙?

感谢, 布兰登

回答

2

如果搜索的确切同一阵列,将工作,没有它,你有其他的值是:

<?php 
$arr = array(
array('name'=>'joe'), 
array('name'=>'bob')); 
var_dump(array_search(array('name'=>'bob'),$arr)); 
//works: int(1) 
$arr = array(
array('name'=>'joe','a'=>'b'), 
array('name'=>'bob','c'=>'d')); 
var_dump(array_search(array('name'=>'bob'),$arr)); 
//fails: bool(false) 
?> 

如果还有其他钥匙,有n o其他方式然后循环,如你已经做的那样。如果你只需要通过名称来找到他们,和名称是唯一的,当你创建数组考虑使用它们作为键:

<?php 
$arr = array(
'joe' => array('name'=>'joe','a'=>'b'), 
'bob' => array('name'=>'bob','c'=>'d')); 
$arr['joe']['a'] = 'bbb'; 
?> 
2

尝试array_search

$key = array_search('joe', $array); 
echo $array[$key]; 
+0

完美,谢谢。 – Orbit 2010-06-17 17:11:51

+0

@Brandon:不客气...... – Sarfraz 2010-06-17 17:12:22

+1

真棒,代码可以工作*和*不会。试着找到'bill',你会发现'joe'是一个持久的小脸。 – salathe 2010-06-17 18:05:01

0

如果您需要做的名字运营,名字中是唯一的你阵列,这将是更好的:

array(
'joe'=> 'large', 
'bill'=> 'small' 
); 

具有多个属性:

array(
'joe'=>array('size'=>'large', 'age'=>32), 
'bill'=>array('size'=>'small', 'age'=>43) 
); 

虽然这里,你可能要考虑更多的OOP approac H。

如果你必须使用一个数字键,看看array_search

0

你可以坚持你的for循环。它和其他方法之间没有太大的区别 - 数组总是需要线性遍历。这就是说,你可以使用这些功能来找到阵列对某一个值:

+0

啊,这让我明白了一点。我在会话中存储了大量数据,因此每次需要访问时都不必查询它。这是不好的做法吗? – Orbit 2010-06-17 18:08:21