2014-02-07 47 views
1

我有一个数组:获取数组中的元素?

array(a,b,c,d,e,f,g,h,i,j); 

祝在信中传递和获得它的字母两侧。例如。 'f'将是'e'和'g'。

有没有一种简单的方法来做到这一点。

此外,如果我要选择'一'我想要一个响应null和'b'。

这里是我的实际数组,数组搜索如何处理多维数组?

array(19) { [0]=> array(3) { ["id"]=> string(2) "46" ["title"]=> string(7) "A" ["thumb"]=> string(68) "013de1e6ab2bfb5bf9fa7de648028a4aefea0ade816b935dd423ed1ce15818ba.jpg" } [1]=> array(3) { ["id"]=> string(2) "47" ["title"]=> string(7) "B" ["thumb"]=> string(68) "9df2be62d615f8a6ae9b7de36671c9907e4dadd3d9c3c5db1e21ac815cf098e6.jpg" } [2]=> array(3) { ["id"]=> string(2) "49" ["title"]=> string(6) "Look 7" ["thumb"]=> string(68) "0bfb2a6dd1142699ac113e4184364bdf5229517d98d0a428b62f6a72c8288dac.jpg" } etc etc... 
+4

搜索信件,取索引,如果其中一个是< 0 or > count(array)返回null,则取index-1和index + 1的元素。 – markusthoemmes

+0

谢谢Merguez,只是想知道这是否有一个PHP函数。 – panthro

+0

您可以使用'array_search'(返回搜索到的字母的索引)和简单数组操作的组合。 – markusthoemmes

回答

4

你可以利用array_search()

搜索数组给定值,并返回相应的键,如果成功

<?php 
$arr=array('a','b','c','d','e','f','g','h','i','j'); 
$key = array_search('a',$arr); 
echo isset($arr[$key-1])?$arr[$key-1]:'NULL'; 
echo isset($arr[$key+1])?$arr[$key+1]:'NULL'; 

Demo

+0

但边缘情况呢。 $ key-1对于字母a来说是-1,这是一个无效的密钥,对于$ key + 1对于使用边缘情况的j – Zarathuztra

+0

也是一样的:echo isset($ arr [$ key-1])? $ arr [$ key-1]:null;' – lucasvscn

+0

@lucasvscn,它已经感谢:) –

2

这工作 -

function find_neighbour($arr, $value){ 
    $index = array_search($value, $arr); 
    if($index === false){ 
     return false; 
    } 
    if($index == 0){ 
     return Array(null, $arr[1]); 
    } 
    if($index == count($arr)-1){ 
     return Array($arr[$index-1], null); 
    } 
    return Array($arr[$index-1], $arr[$index+1]); 
} 
$a = Array('a','b','c','d','e','f','g','h','i','j'); 
print_r(find_neighbour($a,"a")); //[null, 'b'] 
print_r(find_neighbour($a,"j")); //['i', null] 
print_r(find_neighbour($a,"e")); //['d', 'f'] 
0
<?php 
$arr=array("a","b","c","d","e","f","g","h","i","j"); 

function context($array,$element) { 
    return array(@$array[array_search($element,$array)-1],@$array[array_search($element,$array)+1]);; 
} 

print_r(context($arr,"a")); 
print_r(context($arr,"e")); 
print_r(context($arr,"j")); 

输出:

Array 
(
    [0] => 
    [1] => b 
) 
Array 
(
    [0] => d 
    [1] => f 
) 
Array 
(
    [0] => i 
    [1] => 
) 
0

阵列搜索是一个posibility,如之前的评论,或者您也可以通过一个for循环运行

var selection = 'a'; // your selection 

var arr = [ 'a', 'b', 'c', 'd', 'e', 'f']; // small array 

var i = 0, // define loop i 
    le = arr.length, // define loop length 
    out, // output var 
    match = ''; // matching data 
    before = 'non', // before data 
    after = 'non'; // after data 

for(i; i < le; i++){ // run the loop 
    if(arr[i] === selection){ // if loop matches selection 
    match = arr[i]; // set match var 
    after = arr[i+1] || after; // set after var, if undifined, set "non" from above 
    before = arr[i-1] || before; // set before var if undefined, set "non" from above 
    } 
} 

out = 'match: ' + match + ' before: ' + before + ' after: ' + after; //build output 

alert(out); 

http://jsbin.com/qixu/3/