2011-05-07 137 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