2012-03-14 46 views
3

我以前想過這個問題,但從來沒有得到任何關於它的地方。我想我已經用Python做過,但從來沒有PHP。是否有可能將列表函數嵌入到PHP的foreach語句中?

定義基本PHP數組:

$arr = array (array(1,2,3), array(4,5,6), array(7,8,9)); 

然後運行這個片段:

foreach ($arr as $row) 
{ 
    list($a, $b, $c) = $row; 
    echo "$a, $b, $c <br>"; 
} 

這是很常見的,我必須有我的PHP生涯期間完成100萬次......但這似乎有點浪費。 $行是一個臨時變量,從來沒有真正使用和列表()=線似乎應該可以把它放在foreach支架

這樣的事情(當然,這是行不通的):

foreach ($arr as list($a, $b, $c) = $row) 
{ 
    echo "$a, $b, $c <br>"; 
} 

也不對:

foreach ($arr as list($a, $b, $c)) 
{ 
    echo "$a, $b, $c <br>"; 
} 

有沒有人想出這個涼爽的捷徑嗎? 謝謝!

+1

echo $ row [0],$ row [1],$ row [2],'
';'? – Shef 2012-03-14 19:43:19

+0

顯式引用沒有錯......但在我喜歡命名變量的大塊代碼中。 – user1269942 2012-03-14 19:50:58

+0

在更好的形式下,我應該命名我的數組「$ arr」而不是$ a ...我的壞處......哦,我可以編輯,很好。 SO是新的。 – user1269942 2012-03-14 19:51:35

回答

3

是的,那種。使用此:

while(list($key, list($a, $b, $c)) = each($array)) { 
    // do stuff here 
} 

注意使用list兩次 - each返回鍵值對,值也是一個數組,所以我們再次使用list

您也可以使用list(, list($a, $b, $c)),如果需要,可以使用$key。但我認爲這是一種醜陋的語法。 ;}

+0

創意。但可讀性較差,呃。無論如何。 – landons 2012-03-14 19:49:21

+0

您保存了一個變量,添加另一個變量。你讓代碼不可讀。這種建議讓我感到害怕。 :) 儘管如此,你正在給OP他/他要求什麼。 – Shef 2012-03-14 19:49:49

+0

@Shef Yup。就我個人而言,我只是以數組的形式訪問它們 - '$ value ['a']'。但這就是OP想要的...... – 2012-03-14 19:50:49

1

你可以試試這個:

$array = array(array(1, 2, 3), array(4, 5, 6), array(7, 8, 9)); 
for($next = current($array), list($a, $b, $c) = $next; 
    //^current array   ^current list 
    $next; 
    //^check if array 
    $next = next($array), list($a, $b, $c) = $next) 
    //^next array  ^next array's list 
{ 
    echo "$a, $b, $c <br>".PHP_EOL; 
} 

演示:http://codepad.org/cuYl6iaa

輸出:

1, 2, 3 <br> 
4, 5, 6 <br> 
7, 8, 9 <br> 
1

雖然這不會嵌入列表轉換的foreach,你可以找到另一種方法是使用而不是使用foreach,那樣,繞過這種時間變量:

$a = array (array(1,2,3), array(4,5,6), array(7,8,9)); 
$count=(int)count($a); 
for ($i=(int)0; $i<count; $i++) { 
    list($a, $b, $c)=$a[$i]; 
    echo "$a, $b, $c<br />"; 
} 

有了這個,我添加了2個變量,但它們只包含整數,通過刪除包含數組的時態變量,可以減少內存使用量。

+0

您不僅添加了2個變量,而且您已將代碼完全更改爲不同的解決方案。此外'$ i =(int)0'中的邏輯是什麼? – Shef 2012-03-14 19:46:58

+0

只是爲了強制詮釋強制轉換,我有時需要某種類型的代碼。它不會受傷。是的,我改變了解決方案,但至少我給了另一個答案。 – StormByte 2012-03-15 02:39:10

相關問題