2016-04-19 15 views
-1

Gibt es eine Möglichkeit, einen Implod zu stoppen, sobald eine bestimmte Bedingung erfüllt ist? Ich kann nichts in den Dokumenten finden. Dieser Code erzeugt eine Ausgabe, die wie folgt aussieht:PHP: Stop Implode sobald die Bedingung erfüllt ist

page ---> page ---> $goal ---> page ---> $goal 
page ---> $goal ---> page ---> page 

und ich möchte es nur laufen, bis die erste $ Ziel erscheint und dann auf die nächste Zeile zu bewegen, so ist es das letzte wie folgt aus:

page ---> page ---> $goal 
page ---> $goal 

Hier ist der Teil meines Codes mit dem implode. Ich müde, eine if-Anweisung mit einer Pause vor dem Echo zu kleben .. aber das tat nichts.

$goalpage = "leadfactory.ca/analytics/goal.php"; 

$html = "<table>"; 
$html .= "<tr><th align='left'>PAGE PATHS HITTING GOAL.PHP</th></tr>"; 
$paths = array(); 
$sql = "SELECT cookie_uid, page_url FROM pageviews WHERE cookie_uid ORDER BY rowid"; 
$result = mysqli_query($conn, $sql); 
$got_rows = mysqli_num_rows($result); 

if ($got_rows) { 
while ($row = mysqli_fetch_array($result)) { 

// Create an array for the cookie_uid if it doesn't exist yet 
if (! array_key_exists($row['cookie_uid'], $paths) || ! is_array($paths[$row['cookie_uid']])) { 
    $paths[$row['cookie_uid']] = []; 
} 

// Add to the array now that we know it exists 
array_push($paths[$row['cookie_uid']], $row['page_url']); 
} 

foreach ($paths as $session => $page) { 
if ($page == $goalpage) { 
    break; 
} 
    echo "<tr><td>" . implode(' ---> ', $page) . "</td></tr>"; 
} 

} else { 
$html .= '<td colspan="2">No results</td>' . ""; 
} 

$html .= "</table>"; 
echo $html; 

if (!mysqli_query($conn,$sql)) { 
die('Error: ' . mysqli_error($conn)); 
} 
+0

was meinst du, dass nichts getan hat? das ist das Richtige. – Sharky

+0

Was ist der Wert von $ Pfaden? –

Antwort

1
// Your starting array 
$pages = array("page","page","page","page","page","goal","page","page",); 

// Get the index of the "goal" key 
// see: http://php.net/manual/en/function.array-search.php 
$lastkey = array_search("goal", $pages); 

// Shorten your array accordingly 
// see: http://php.net/manual/en/function.array-slice.php 
$pages = array_slice($pages, 0, $lastkey+1); 

// Implode 
implode(' ---> ', $pages); 

Geige: https://3v4l.org/CIAH5

Nein, können Sie nicht "stop" implodieren, aber Sie verwirren mit Ihrem Array können, bevor Sie implodieren ...

0

Sie dies tun können:

$arr[0]="page0"; 
$arr[1]="page1"; 
$arr[2]="page2"; 
$arr[3]="goal"; 
$arr[4]="page4"; 


echo implode(" ---> ", array_slice($arr, 0, array_search("goal",$arr)+1)); 

Ausgänge

page0 ---> page1 ---> page2 ---> goal 

es Siehe in Aktion https://3v4l.org/cFhv3

die Funktion wäre:

function implode_with_limit($arr, $goal) 
{ 
    return implode(" ---> ", array_slice($arr, 0, array_search($goal,$arr)+1)); 
} 
+0

Hmm, es scheint mir nur die erste Seite nur für jede Zeile zu geben. foreach ($ Pfade als $ Sitzung => $ Seite) { Echo " ". implode ("--->", array_slice ($ page, 0, array_search ($ ziel, $ seite) +1)). ""; // echo "". implodieren ('--->', $ page). ""; } – Topher

+0

@Topher Sie brauchen nicht foreach. Verwenden Sie es wie "echo" ".implode_with_limit ($ Pfade," Ziel ")." "; wo' 'Ziel" 'was auch immer ist Ihr Stopp-Wert. – Sharky