奇怪的php数组

时间:2010-01-12 20:50:50

标签: php

我的php数组看起来像这样:

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

现在我想回复[atitle]中的值。 具体而言我想将atitle的值压缩成另一个变量。 我怎么能实现呢?

6 个答案:

答案 0 :(得分:4)

使用PHP 5.3:

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

如果你没有5.3,你必须使匿名函数成为常规函数,并将名称作为字符串提供。


上面我错过了关于空元素的部分,使用这种方法可以使用array_filter解决:

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

如果你疯了,你可以写一行......

答案 1 :(得分:3)

您的数组声明有点像这样:
(嗯,在你真实的情况下,你可能会从数据库或类似的东西中获取你的数据 - 但这应该没问题,在这里测试)

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


这意味着您可以将所有标题提取到数组中,循环遍历初始数组(不包括第一个元素,并使用每个对象的atitle属性)

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


这会得到一个像这样的数组:

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)


你现在可以implode将所有这些变为字符串:

echo implode(', ', $titles);

你会得到:

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

答案 2 :(得分:1)

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

让他们进入你需要做的数组:

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

然后resultArray是所有atitles的数组

然后你可以按照自己的意愿输出

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

答案 3 :(得分:0)

你有什么东西。

您可以通过

访问[atitle]
$array[1]->atitle;

答案 4 :(得分:0)

如果要在输出前检查标题是否存在,可以使用:

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

如果你想在数组中使用它,只需快速切换存储方法:

// 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要求您使用指针表示法->进行引用,而数组则要求您通过索引引用它们,即[4]。你可以参考这些:

$array[0]
$array[1]->aid
$array[1]->atitle
$array[2]->aid
$array[2]->atitle
// etc, etc.

答案 5 :(得分:0)

$yourArray = array(); //array from above
$atitleArray = array();

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

看看你的数组的每个元素都不是一个对象,你需要检查它。