2016-04-19 3 views
-1

Есть ли способ остановить развязку после выполнения определенного условия? Я ничего не могу найти в любом из документов. Этот код производит вывод, который выглядит следующим образом:PHP: Stop Implode после выполнения условия

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

и я хочу, чтобы работать только до тех пор, пока не появится первый $ цель, а затем перейти на следующую строку, так что последний, как это:

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

Вот часть моего кода с помощью implode. Я устал придерживаться утверждения if с перерывом перед эхом ... но это ничего не делало.

$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

, что вы имеете в виду, что ничего не делал? это правильная вещь. – Sharky

+0

Какова ценность '$ paths'? –

ответ

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); 

скрипку: https://3v4l.org/CIAH5

Нет, вы не можете "остановить" Implode, но вы можете связывайтесь с вашего массива, прежде чем взрывать ...

0

вы можете сделать это:

$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)); 

выходы

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

в действии https://3v4l.org/cFhv3

функция будет:

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

Хм, похоже, это дает мне только первую страницу только для каждой строки. foreach ($ paths as $ session => $ page) { echo "". implode ("--->", array_slice ($ page, 0, array_search ($ goal, $ page) +1)). ""; // echo "". implode ('--->', $ page). ""; } – Topher

+0

@Topher вам не нужен foreach. используйте его как 'echo '" .implode_with_limit ($ paths, "goal"). ""; 'where'" goal "' независимо от вашего значения остановки. – Sharky

Смежные вопросы