2016-12-02 2 views
1

Ich habe eine Zeichenfolge, ich muss wissen, bei welchem ​​Index ist diese Zeichenfolge im Array vorhanden. Mein Array ist wie folgt:wie Schlüssel aus jedem Array zu finden ist 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" 
    } 
} 

Das letzte Mal gesehen Datum ist: 2016.09.27.
Ich möchte wissen, bei welchem ​​Index 2016-09-27 in der Array vorhanden sind. Also ich weiß, was ist ad_uid bezogen auf dieses Datum. Ich habe eine Methode, die das tut.

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

Das Ergebnis erhält ein leeres Array. Ich habe versucht array_serach() hat gleiche leere Ergebnisse. Irgendwelche anderen alternativen Lösungen, um Ergebnisse zu erzielen?

+1

Sie möchten ein Array-Schlüssel suchen? http://php.net/manual/en/function.array-key-exists.php Oder Sie suchen nach Array-Wert? http://php.net/manual/en/function.array-search.php –

+0

Sie meinen "what indexes", kein einziger Index, oder? –

+0

Ja, kein einziger Index – sanainfotech

Antwort

1

Um alle $ad_uids last_seen zu einem bestimmten Datum zu finden, können Sie array_filter verwenden, die Ihnen alle Elemente zurückgeben, die Sie suchen. Wenn Sie ad_uids nur benötigen, können Sie array_map für dieses Array wie folgt gelten:

<?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

+0

Danke Alex, das hat funktioniert – sanainfotech

0

Da jeder jeden Eintrag Ihres Array ist ein Objekt und Sie kennen die attributs Namen von Thesen Objekte (ich nehme an, sie ändern sich nie), würde ich es tun, wie folgt:

/** 
* @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

, dass zu tun, nur loop Array

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

dann prüfen, ob $last_seen_date last_seen_date an den Schleifenindex gleich $row->last_seen_date

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

wenn es nur zurückgeben wird

return $key; 

so Ihre PHP-Code wie dieser

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

RESULT wäre

enter image description here

Working Demo

Verwandte Themen