我需要在以下数组中找到与最后一次出现(id = 100001203541047)相对应的键:
[0] => Array
(
[id] => 10152583762905798_10152583800415798
[from] => Array
(
[id] => 100001203541047
[name] => Gangareddy Chealimealla
)
[message] => Desi Flipkart
[created_time] => 2014-07-30T07:30:34+0000
[like_count] => 0
[user_likes] =>
[can_comment] => 1
)
[1] => Array
(
[id] => 10152583762905798_10152583786375798
[from] => Array
(
[id] => 100001430479186
[name] => Pratik Das
)
[message] => flipkart rules! (y)
[created_time] => 2014-07-30T07:16:56+0000
[like_count] => 0
[user_likes] =>
[can_comment] => 1
)
[2] => Array
(
[id] => 10152583762905798_10152583802415798
[from] => Array
(
[id] => 100001203541047
[name] => Gangareddy Chealimealla
)
[message] => Desi Flipkart
[created_time] => 2014-07-30T08:30:34+0000
[like_count] => 0
[user_likes] =>
[can_comment] => 1
)
我尝试了以下代码,但它返回了2个位置。
foreach($arr as $key => $array)
{
if ( $array['from']['id'] === $id)
echo $key."\n\n";
}
}
为什么这只显示最后一个?
答案 0 :(得分:0)
为简单起见,您可以将它们存储在一个数组中,然后在循环之后,取最后一个。
更改
echo $key."\n\n";
到
$ids[] = $key
在循环之后,你将在
中完成最后一次出现end($ids);
希望对你有所帮助。
答案 1 :(得分:0)
// function where you can pass the id you are looking for, eg.: 100001203541047.
function findElementById($id, $arr) {
// iterate from the back, and you get the last match.
for ($i = count($arr) - 1; $i >= 0; $i--) {
$array = $arr[$i];
if($array['from']['id'] === $id)){
return $array; // if you find the element return it.
}
}
return null; // return null if not found.
}
使用示例:
$elementYouAreLookingFor = findElementById(100001203541047, $arr);
答案 2 :(得分:0)
假设数组已经排序,您可以使用array_map查找包含搜索变量的数组,然后使用array_pop获取最后的结果。
例如:此函数仅返回带有魔术ID的最后一个数组值。
$magicID = '100001203541047';
function findSame($value){
if($value['from']['id'] == $magicID){
return $value;
}
}
// $values should contain your data
$values = array(array(1,'from'=>array('id'=>'100001203541047'),3), array(1,'from'=>array('id'=>'20000'),4), array(2,'from'=>array('id'=>'100001203541047'),3));
$mapping = array_pop(array_filter(array_map('findSame', $values)));
var_dump($mapping);
答案 3 :(得分:0)
这是一个有趣的(PHP> = 5.5.0):
echo array_search($id,
array_reverse(array_column(array_column($array, 'from'), 'id'), true));
答案 4 :(得分:0)
您编写的代码几乎可以使用。问题是,每次在foreach循环中遇到与id匹配的密钥时,它都会立即打印密钥。
foreach($arr as $key => $array) {
if ( $array['from']['id'] === $id) {
echo $key."\n\n";
}
}
如果您将密钥存储在变量中,那么在循环完成后,变量中的值将是最后一个,您只需打印它即可。
$last = "";
foreach($arr as $key => $array) {
if ( $array['from']['id'] === $id) {
$last = $key;
}
}
echo $last."\n\n";