2011-05-07 106 views
-1

我有一个数组,看起来像这样:PHP数组循环

Array 
(
    [0] => stdClass Object 
     (
      [user_id] => 10 
      [date_modified] => 2010-07-25 01:51:48 
     ) 

    [1] => stdClass Object 
     (
      [user_id] => 16 
      [date_modified] => 2010-07-26 14:37:24 
     ) 

    [2] => stdClass Object 
     (
      [user_id] => 27 
      [date_modified] => 2010-07-26 16:49:17 
     ) 

    [3] => stdClass Object 
     (
      [user_id] => 79 
      [date_modified] => 2010-08-08 18:53:20 
     ) 

) 

,我需要做的是打印出来的用户ID的逗号分隔这样:

10,16,27,79

我猜它会是一个for循环,但我正在寻找最有效的方式做到这一点在PHP

哦,数组名是:$ MARRAY

我尝试下面的方法,但我不断收到此错误:致命错误:在

+0

他们需要按顺序吗? – 2011-05-07 20:06:04

+0

用排列表示法替换数组索引。没有人意识到它们是物体。 ' - > user_id',而不是'[“user_id的”]'我改变了我的答案,以反映这一 – 2011-05-07 23:41:39

回答

0
$firstTime = true; 
foreach($mArray as $k => $cur) 
{ 
    //echo $firstTime ? $firstTime = false : ', '; //this one-liner cna replace the following two, kind of unclear but i like it 
    if (!$firstTime) echo ', '; 
    else $firstTime = false; 
    echo $cur->user_id; 
} 

这是更多的乐趣不能使用类型为stdClass的对象为数组:

$f = function($a,$b) {$c = $a ? ', ' : ''; return $a . $c . $b->user_id;}; 
echo array_reduce($f, $mArray, ''); 

詹姆斯暗指使用join,这是一个好主意,避免后面的逗号问题

$newArr = array_map(function($x) {return $x->user_id;}, $mArray); //make array of just user-ids 
echo join(', ',$newArr); // implode === join, join is an alias of implode 
+1

如果你使用上面提到詹姆斯的方法,你可以修剪结尾。但是,对于你的循环,你可以有一个在第一循环之后变为假了“isFirstItem”布尔。然后if语句检查上isFirstItem假前暂时搁置一个逗号而不是把一个之后,从那里出来。 – Mikecito 2011-05-07 20:14:37

+0

是的,这将起作用。同样,如果你认为他有数字索引就像他在本例中确实你可以做'如果($满足K == 0)'。我正试图让问题的作者留下一些东西。如果是我,id使用reduce函数 – 2011-05-07 20:20:45

+0

出现此错误:致命错误:无法使用类型为stdClass的对象作为 – Jordash 2011-05-07 20:57:28

0

我会做它是这样的:

$output = ""; 
foreach($mArray as $i => $val) { 
    $output .= $val->user_id . ", " ; 
} 
$output = trim($output, ", "); 

哎呀,你很可能join和完全消除foreach循环!

+0

继续收到此错误:致命错误:不能使用stdClass类型的对象作为 – Jordash 2011-05-07 21:22:15

+0

中的数组詹姆斯,这里是对象...所以它不工作... – 2011-05-07 23:33:34

+0

@softm - 告诉我你没有对此表示满意。所有人都忽略了它,你是否会对我们所有人产生负面影响? – 2011-05-08 08:33:18

0
$length = sizeof($mArray); 
sort($mArray); 
foreach($mArray as $item) 
{ 
    echo $item['user_id'] . ($item !== $mArray[$length]) ? ', ' : ''; 
} 

如果您不需要它,请按顺序取消排序。

+0

在PHP连接是期间不是加:) – 2011-05-07 20:16:33

+0

@softm谢谢,我甚至没有意识到它。 – 2011-05-07 20:18:42

0

每当我需要(用逗号在这种情况下),以使分隔列表,我开始与阵列和破灭()它的分隔符。在这种情况下,分隔符将是逗号+空格:

$user_ids = array(); 
foreach($mArray as $item) { 
    $user_ids[] = $item['user_id']; 
} 
$comma_delimited_list = implode(', ', $user_ids);//magic