By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,746 Members | 1,865 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,746 IT Pros & Developers. It's quick & easy.

Array Problem

P: n/a
I thought I understood how to traverse an array, but I guess I was wrong. I
have tried writing the code snippet below as: while, for, foreach... and get
the same (consistently wrong) result each time!

$data is a string variable containing lines of text. Each line is terminated
with a break (<br>). I need to analyze each line to ensure it does not exceed
$maxLength. If it is <= $maxLength do nothing, otherwise truncate the line at
$maxLength minus 3 and add ellipses (...). I then need to reassemble
everything back into a string variable, for later printing. Here is my code:

$line = explode('<br>', $data);
$count = count($line);
$i=1;
while ($i <= $count) {
$line = (strlen($line)>$maxLength) ? (substr($line,0,($maxLength-3)).'...')
: $line;
$i++;
}
$data = implode('<br>', $line);
echo $data;

I know I am forming the array correctly, because $line and $count display as
expected. I know that the ternary is correct, because it produces the desired
result using the original string (i.e., substituting $data outside the
'while' loop).

Any help will be greatly appreciated.
Jul 17 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
jn

"<>" <lo******@44.255.255.255> wrote in message
news:9H********************@twister.socal.rr.com.. .
I thought I understood how to traverse an array, but I guess I was wrong. I have tried writing the code snippet below as: while, for, foreach... and get the same (consistently wrong) result each time!

$data is a string variable containing lines of text. Each line is terminated with a break (<br>). I need to analyze each line to ensure it does not exceed $maxLength. If it is <= $maxLength do nothing, otherwise truncate the line at $maxLength minus 3 and add ellipses (...). I then need to reassemble
everything back into a string variable, for later printing. Here is my code:
$line = explode('<br>', $data);
$count = count($line);
$i=1;
while ($i <= $count) {
$line = (strlen($line)>$maxLength) ? (substr($line,0,($maxLength-3)).'...') : $line;
$i++;
}
$data = implode('<br>', $line);
echo $data;

I know I am forming the array correctly, because $line and $count display as expected. I know that the ternary is correct, because it produces the desired result using the original string (i.e., substituting $data outside the
'while' loop).

Any help will be greatly appreciated.


You aren't using your counter for anything. You are trying to run this on
every element, not the whole array at once. You should do this:
$line[$i] = (strlen($line[$i])>$maxLength) ?
(substr($line[$i],0,($maxLength-3)).'...') : $line[$i];

HTH
Jul 17 '05 #2

P: n/a
[ not posted to alt.php ]

<> wrote:
$line = explode('<br>', $data); ### $line is an array $count = count($line);
$i=1;
while ($i <= $count) {
$line = (strlen($line)>$maxLength) ? (substr($line,0,($maxLength-3)).'...') : $line; ### ^^^^^^^^^^^^^ strlen( <array> ) ???? $i++;
}
$data = implode('<br>', $line);
echo $data;

I know I am forming the array correctly, because $line and $count display as
expected. I know that the ternary is correct, because it produces the desired
result using the original string (i.e., substituting $data outside the
'while' loop).


try:

<?php
$line = explode('<br>', $data);
foreach ($line as $currline) {
while (strlen($currline) > $maxLength) {
### As I don't want to change the array inside the loop,
### I'm creating another array for the results
$newline[] = (substr($currline, 0, ($maxLength - 3)) . '...');
$currline = substr($currline, ($maxLength - 3));
}
$newline[] = $currline;
}
$newdata = implode('<br/>', $newline);
echo $newdata;
?>
Happy Coding :)

--
..sig
Jul 17 '05 #3

P: n/a

"jn" <js******@cfl.rr.com> wrote in message
news:jP********************@twister.tampabay.rr.co m...
"<>" <lo******@44.255.255.255> wrote in message
news:9H********************@twister.socal.rr.com.. . <snip>
$data is a string variable containing lines of text. Each line is

terminated
with a break (<br>). I need to analyze each line to ensure it does not

exceed
$maxLength. If it is <= $maxLength do nothing, otherwise truncate the

line at
$maxLength minus 3 and add ellipses (...). I then need to reassemble
everything back into a string variable, for later printing. Here is my code:

$line = explode('<br>', $data);
$count = count($line);
$i=1;
while ($i <= $count) {
$line = (strlen($line)>$maxLength) ?

(substr($line,0,($maxLength-3)).'...')
: $line;
$i++;
}
$data = implode('<br>', $line);
echo $data;

<snip>
You aren't using your counter for anything. You are trying to run this on
every element, not the whole array at once. You should do this:
$line[$i] = (strlen($line[$i])>$maxLength) ?
(substr($line[$i],0,($maxLength-3)).'...') : $line[$i];


I could have sworn I already tried that! Oh well... thanks for your help.
I'll learn.

Now that this snippet is working, it has uncovered another problem. That is,
if a <pre> is part of $data, the ternary is ineffective on that substring. I
guess I can solve that with an if/else and substr. Do you think it is better
to do it inside or outside of the loop?
Jul 17 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.