как найти ключ из любого массива переполнения стека

У меня есть строка, мне нужно знать, по какому индексу эта строка существует в массиве. Мой массив выглядит следующим образом:

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 () имеет такие же пустые результаты. Есть ли другие альтернативные решения для достижения результатов?

1

Решение

Найти все $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);

пример

1

Другие решения

Поскольку каждая запись вашего массива является объектом, и вы знаете имена атрибутов этих объектов (я полагаю, они никогда не меняются), я бы сделал это так:

/**
* @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;
}
0

чтобы сделать это просто зациклить ваш массив

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>';

РЕЗУЛЬТАТ

введите описание изображения здесь

Рабочая Демо

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector