У меня есть строка, мне нужно знать, по какому индексу эта строка существует в массиве. Мой массив выглядит следующим образом:
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 () имеет такие же пустые результаты. Есть ли другие альтернативные решения для достижения результатов?
Найти все $ad_uids
last_seen на конкретную дату, которую вы можете использовать array_filter который вернет вам все элементы, которые вы ищете. Если вам нужны только ad_uids, вы можете подать заявку 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);
Поскольку каждая запись вашего массива является объектом, и вы знаете имена атрибутов этих объектов (я полагаю, они никогда не меняются), я бы сделал это так:
/**
* @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 $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>';
РЕЗУЛЬТАТ