我有以下用户名数组:
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个用户
有谁知道这是如何实现的?
答案 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];