2016-02-26 17 views
5

Sto scrivendo una funzione PHP che avrà una matrice nel seguente formato:costruzione sempre più lunghe stringhe da una matrice

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

E eco le seguenti stringhe:

one 
one-two 
one-two-three 

che non posso capire come fare questo. Ho provato con una variabile per memorizzare quella precedente e quindi utilizzarlo, ma funziona solo per una:

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

Emissione:

one 
two 
two-three 

Questo approccio probabilmente sarebbe inefficiente in ogni caso, come questo lo script dovrebbe essere tecnicamente in grado di gestire qualsiasi lunghezza di array.

Qualcuno può aiutare?

+0

Vuoi creare tutte le possibili associazioni o solo aggiungere una stringa ad ogni iterazione? –

+0

Solo una stringa per ogni iterazione, penso al momento. – Forest

risposta

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

Un'altra:

$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

Possiamo usare array_shift() per estrarre il primo elemento dalla matrice. Poi possiamo scorrere i valori e li aggiunge ad una stringa:

<?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"; 
} 

uscita:

one 
one-two 
one-two-three 

Demo in Codepad.

3

Stai comparando 0! = Null, il problema deriva dal confronto con solo uno =, prova! ==, dovrebbe funzionare.

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

utilizzando array_slice e implode funzione

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

o/p

one 
one-two 
one-two-three 
Problemi correlati