garip php dizi

6 Cevap

Benim php dizi bu gibi görünüyor:

Array ( 
[0] => dummy 
[1] => stdClass Object ( 
    [aid] => 1 
    [atitle] => Ameya R. Kadam ) 
[2] => stdClass Object ( 
    [aid] => 2 
    [atitle] => Amritpal Singh ) 
[3] => stdClass Object ( 
    [aid] => 3 
    [atitle] => Anwar Syed ) 
[4] => stdClass Object ( 
    [aid] => 4 
    [atitle] => Aratrika )  
) )

now i want to echo the values inside [atitle]. to be specific i want to implode values of atitle into another variable. how can i make it happen?

6 Cevap

foreach($array as $item){
    if(is_object($item) && isset($item->atitle)){
         echo $item->atitle;
    }
}

sadece yapmanız gereken istediğiniz bir dizi içine almak için:

$resultArray = array();
foreach($array as $item){
    if(is_object($item) && isset($item->atitle)){
          $resultArray[] = $item->atitle;
    }
}

Sonra resultArray tüm atitles bir dizidir

Eğer arzu ediyorum gibi Sonra yapabilirsiniz çıkış

$output = implode(', ', $resultArray);

PHP 5.3 ile:

$result = array_map(function($element) { return $element->atitle; }, $array);

Eğer 5.3 yoksa sen anonim işlevini düzenli bir hale ve dizge olarak adını sağlamak zorunda.


Ben bu yaklaşımı kullanarak, boş bir öğe hakkında kısmını cevapsız yukarıdaki bu array_filter kullanılarak çözülebilir:

$array = array_filter($array, function($element) { return is_object($element); });
$result = array_map(function($element) { return $element->atitle; }, $array);

Eğer deli iseniz tek satırda yazabiliriz ...

Your array is declared a bit like this :
(Well, you're probably, in your real case, getting your data from a database or something like that -- but this should be ok, here, to test)

$arr = array(
    'dummy',
    (object)array('aid' => 1, 'atitle' => 'Ameya R. Kadam'), 
    (object)array('aid' => 2, 'atitle' => 'Amritpal Singh'), 
    (object)array('aid' => 3, 'atitle' => 'Anwar Syed'), 
    (object)array('aid' => 4, 'atitle' => 'Aratrika'), 
);


Which means you can extract all the titles to an array, looping over your initial array (excluding the first element, and using the atitle property of each object) :

$titles = array();
$num = count($arr);
for ($i=1 ; $i<$num ; $i++) {
    $titles[] = $arr[$i]->atitle;
}
var_dump($titles);


This will get you an array like this one :

array
  0 => string 'Ameya R. Kadam' (length=14)
  1 => string 'Amritpal Singh' (length=14)
  2 => string 'Anwar Syed' (length=10)
  3 => string 'Aratrika' (length=8)


And you can now implode all this to a string :

echo implode(', ', $titles);

Ve alırsınız:

Ameya R. Kadam, Amritpal Singh, Anwar Syed, Aratrika

Orada ne var bir nesnedir.

Sen [atitle] üzerinden erişebilirsiniz

$array[1]->atitle;

Eğer çıkıştan önce başlığın varlığını kontrol etmek istiyorsanız, kullanabilirsiniz:

// generates the title string from all found titles
$str = '';
foreach ($array AS $k => $v) {
    if (isset($v->title)) {
        $str .= $v->title;
    }
}
echo $str;

Bir dizide bu istiyorsa depolama yöntemleri sadece hızlı bir anahtar bulunuyor:

// generates the title string from all found titles
$arr = array();
foreach ($array AS $k => $v) {
    if (isset($v->title)) {
        $arr[] = $v->title;
    }
}
echo implode(', ', $arr);

stdClass diziler, dizin onları referans yani [4] gerektirir oysa başvurmak için işaretçi gösterimi -> kullanmak gerektirir. Bu gibi başvurabilirsiniz:

$array[0]
$array[1]->aid
$array[1]->atitle
$array[2]->aid
$array[2]->atitle
// etc, etc.
$yourArray = array(); //array from above
$atitleArray = array();

foreach($yourArray as $obj){
 if(is_object($obj)){
    $atitleArray[] = $obj->aTitle;
  }
}

Lütfen dizinin her öğesi bir nesne değil nasıl gibi görerek, bunu kontrol etmek gerekir.