如何从任何数组中找到键 php

how to find key from any array php

我有一个字符串,我需要知道该字符串在数组中的索引位置。我的数组如下:

array(3) 
{
    [0]=>object(stdClass)#47170 (3) 
    {
        ["countries"]=>string(2) "HK"
        ["last_seen_date"]=>string(10) "2016-09-17"
        ["ad_uid"]=>string(14) "157d5908a1ca83"
    }
    [1]=>object(stdClass)#47171 (3) 
    {
        ["countries"]=>string(2) "HK"
        ["last_seen_date"]=>string(10) "2016-09-27"
        ["ad_uid"]=>string(14) "157d7978513bc3"
    }
    [2]=>object(stdClass)#47230 (3) 
    {
        ["countries"]=>string(2) "HK"
        ["last_seen_date"]=>string(10) "2016-09-27"
        ["ad_uid"]=>string(14) "157ea7239824e9"
    }
}

最后一次上线日期是:2016-09-27.
我想知道数组中 2016-09-27 存在于什么索引处。所以我知道 ad_uid 与那个日期有什么关系。我有一个方法可以做到这一点。

 public function getAd_uid($last_seen_date,$values){      
 $key = array_keys($values,$last_seen_date);
 print_r($key);    
 }   

结果得到一个空数组。我试过 array_serach() 有相同的空结果。还有其他替代解决方案来取得成果吗?

由于数组中的每个条目都是一个对象,并且您知道这些对象的属性名称(我假设它们永远不会改变),所以我会这样做:

/**
 * @param   string  $last_seen_date
 * @param   array   $values
 * @return  mixed   null|int
 */
function getAdUid($last_seen_date, array $values) {
    // Just in case no entry match
    $matching_index = null; 
    // Loop through each entry: $entry is an object
    foreach($values as $index => $entry) {
        if($entry->last_seen_date == $last_seen_date) {
            $matching_index = $index;
            break; // end loop: we found that we are looking for
        }
    }

    return $matching_index;
}

要做到这一点,只需循环你的数组

foreach($values as $key => $row) {
    // do something
}

然后检查 $last_seen_date 是否等于循环索引 last_seen_date $row->last_seen_date

if ($row->last_seen_date == $last_seen_date) {
   return $key;
}

如果只是return就

return $key;

所以你的 php 代码会像这样

$arr = array(
    0 =>
        (object)array(
        "countries" => "HK",
        "last_seen_date" => "2016-09-17",
        "ad_uid"=> "157d5908a1ca83"
    ),
    1 =>
        (object)array(
        "countries" => "HK",
        "last_seen_date" => "2016-09-20",
        "ad_uid" => "157d7978513bc3"
    ),
    2 =>
        (object)array(
        "countries" => "HK",
        "last_seen_date" => "2016-09-26",
        "ad_uid" => "157ea7239824e9"
    )
);
function getAd_uid($last_seen_date, $values){
    foreach($values as $key => $row) {
        if ($row->last_seen_date == $last_seen_date) {
           return $key;
        }
    }
} 


echo '2016-09-17 is on index => '.getAd_uid('2016-09-17', $arr).'<br>';
echo '2016-09-20 is on index => '.getAd_uid('2016-09-20', $arr).'<br>';
echo '2016-09-26 is on index => '.getAd_uid('2016-09-26', $arr).'<br>';

结果

Working Demo

要在特定日期查找所有 $ad_uids last_seen,您可以使用 array_filter which will return you all elements you are looking for. If you need ad_uids only, you can apply array_map 到该数组,如下所示:

<?php
// $array is the array in question.

$filtered = array_filter($array, function($item) {
    return $item->last_seen_date == "2016-09-27";
});

$ad_uids = array_map(function($item){return $item->ad_uid;}, $filtered);

Example