在某个值之前/之后获取数组值

时间:2016-04-13 09:53:31

标签: php arrays

我有以下用户名数组:

Array
(
[0] => Sarah
[1] => Leon
[2] => Gary
[3] => Nathan
[4] => Adam
[5] => Lee
[6] => Alex
[7] => Andy
[8] => Terry
)

我想在特定名称之后获得3个用户,并在特定名称之前获得3个用户。例如。名为'Adam'之后的3个用户和名为'Adam'之前的3个用户

有谁知道这是如何实现的?

5 个答案:

答案 0 :(得分:2)

使用array_slice()array_search()

<?php

$names = [
'Sarah',
'Leon',
'Gary',
'Nathan',
'Adam',
'Lee',
'Alex',
'Andy',
'Terry',
];

$name = "Adam"; //name to be searched
$foundIndex = array_search($name, $names);

if (false !== $foundIndex) {
   $beforeNames = array_slice($names, $foundIndex -3 , 3);
   $afterNames = array_slice($names, $foundIndex + 1, 3);

   var_dump($beforeNames,$afterNames);
} else {
  // not found 
}

您还可以检查范围是否正常

答案 1 :(得分:1)

使用array_search,您可以获得所需价值的关键字;然后很容易建立一个新阵列。

答案 2 :(得分:0)

请尝试以下代码。

<?php 

$temp = array('Sarah',
                'Leon',
                'Gary',
                'Nathan',
                'Adam',
                'Lee',
                'Alex',
                'Andy',
                'Terry');
$search = "Adam";

$index = array_search($search, $temp , TRUE);
if( $index ){
$dec = $index - 1;
$inc = $index + 1;
$max = sizeof($temp);
$c = 0;
$recs = 3;

//names before searched name
while( $c < 3 && $dec > 0 ){
echo $temp[$dec];
$dec--;
$c++;
}

//names after searched name
$c = 0;
while( $c < 3 && $inc < $max ){
echo $temp[$inc];
$inc++;
$c++;
}
}
?>

答案 3 :(得分:0)

使用array_search()获取密钥,然后array_slice()破解..

<?php 
$input  = array(
                0 => 'Sarah',
                1 => 'Leon',
                2 => 'Gary',
                3 => 'Nathan',
                4 => 'Adam',
                5 => 'Lee',
                6 => 'Alex',
                7 => 'Andy',
                8 => 'Terry',
          );
$key = array_search('Adam',$input);       
$next = array_slice($input,$key+1,3);
$prev = array_slice($input,$key-3,3);

echo "<pre>"; print_r($next);
echo "<pre>"; print_r($prev);

?>

这将输出:

Array
(
    [0] => Lee
    [1] => Alex
    [2] => Andy
)

Array
(
    [0] => Leon
    [1] => Gary
    [2] => Nathan
)

答案 4 :(得分:0)

$my_array = array('Sarah', 'Leon', 'Gary', 'Adam');

$key = key( preg_grep( '/Adam/' , $my_array ) );


// Use a for loop

echo $my_array[$key+1];
echo $my_array[$key+2];
echo $my_array[$key+3];

echo $my_array[$key-1];
echo $my_array[$key-2];
echo $my_array[$key-3];