2016-02-26 75 views
5

我寫這將在以下格式的數組PHP函數:建築物的數組越來越長的字符串

array(
    'one', 
    'two', 
    'three' 
) 

和回聲以下字符串:

one 
one-two 
one-two-three 

我不能弄清楚如何做到這一點。我一直在使用一個變量來存儲前一個,然後用它嘗試過,但它僅適用於一個:

$previous = null; 
for($i = 0; $i < count($list); $i++) { 
    echo ($previous != null ? $route[$previous] . "-" : '') . $route[$i]; 
    $previous = $i; 
} 

對外輸出:

one 
two 
two-three 

這種做法很可能是低效率的,無論如何,因爲這腳本應該在技術上能夠處理任何長度的數組。

任何人都可以幫忙嗎?

+0

做什麼? –

+0

每次迭代只需一個字符串,我現在認爲。 – Forest

回答

6
for ($i = 1, $length = count($array); $i <= $length; $i++) { 
    echo join('-', array_slice($array, 0, $i)), PHP_EOL; 
} 
3
$arr = array('one', 'two', 'three'); 

foreach (array_keys($arr) as $index) { 
    $result = array(); 
    foreach ($arr as $key => $val) { 
     if ($key <= $index) { 
      $result[] = $val; 
     } 
    } 
    echo implode('-', $result) . '<br />'; 
} 
2

另一種:

$data = array('one','two','three'); 
$str = ''; 
$len = count($data); 
for ($i=0; $i<$len;$i++){ 
$delim = ($i > 0) ? '-' : ''; 
$str .=  $delim . $data[$i]; 
echo $str .'<br>'; 
} 
2

我們可以以提取從陣列的第一個元素使用array_shift()。然後我們就可以遍歷值,並把它們添加到字符串:

<?php 

$array = array(
    'one', 
    'two', 
    'three' 
); 

// Get the first element from the array (it will be removed from the array) 
$string = array_shift($array); 
echo $string."\n"; 

foreach ($array as $word) { 
    $string = implode('-', array($string, $word)); 
    echo $string."\n"; 
} 

輸出:

one 
one-two 
one-two-three 

Demo in Codepad

3

您正在比較0!= null,問題來自於只有一個=的比較,試試!==,它應該可以工作。

2
$arr = ['one','two','three']; 

doSomething($arr); 

function doSomething($arr) { 
    foreach($arr as $key=>$val) { 
     $s = array_slice($arr,0,($key+1)); 
     echo implode('-',$s) . "<br>"; 
    } 
} 
1

使用array_sliceimplode功能

foreach($arr as $key => $value){ 
    echo implode("-",array_slice($arr, 0, $key+1))."<br/>"; 
} 

O/P要創造一切可能的協會或只在每次迭代中添加一個字符串

one 
one-two 
one-two-three