Jump to content

[SOLVED] add commas between names


vynsane

Recommended Posts

i've got a script that pulls first name, last name, and suffix from a DB query and echos them only if they are not null. the names are cross-referenced by id number from two other tables. it displays the name pieces that are not null for each "job", and the jobs and names are determined by another id number for an individual issue page. an example of the output is here:

 

www.WallCrawlersWeb.com/database/comics/title/asm/issue/148/creative

 

as you can see, the job "inker" has two names after it. how can i get it to put a comma between those two names. this is the bit that writes that box:

 

$creatorQuery = mysql_query("SELECT * FROM ComicCreators, Creators, CreatorCat WHERE ComicCreators.issueID = '".$ComicIssues['ID']."' AND ComicCreators.creatorID = Creators.ID AND ComicCreators.creatorCatID = CreatorCat.ID ORDER BY CreatorCat.ID");
$creatorNumRows = mysql_num_rows($creatorQuery);
if($creatorNumRows > 0) {
	while($row = mysql_fetch_array($creatorQuery)){
		$creators[$row['catName']][] = $row;
	}
	foreach($creators as $creatorCat => $creators) {
		echo "<p><strong>".$creatorCat.":</strong>";
		foreach($creators as $creator){
			if($creator['Fname'] !=Null){
				echo " ".$creator['Fname']."";
			}
			if($creator['Lname'] !=Null){
				echo " ".$creator['Lname']."";
			}
			if($creator['suffix'] !=Null){
				echo " ".$creator['suffix']."";
			}
		}
		echo "</p>\n";
	} 
}
else {
       	        echo "\t\t\t\t\t<p>No creative team information available.</p>\n";
}

 

i've tried using join() but it only works if it's an array, and by the time i've echoed or stringed the name based on what is not null, it's not an array anymore. i've also tried using rtrim() but it gets rid of all commas, because each name is rtrim()ed.

 

anyone got a good solution?

Link to comment
Share on other sites

i love one-word answers, that's awesome. always a lot of fun.

 

as stated above, i've already tried using "join()" which is an alias of "implode()". this doesn't work since the first name, last name and suffix are each independent nodes of the array containing them (since they're in separate columns, Fname, Lname and suffix), and thus will end up with something like this:

 

Inker: Mike, Esposito, David, Hunt

 

whereas i need it to look like this:

 

Inker: Mike Esposito, David Hunt

 

(i also would like it to say "Inkers:" instead of "Inker:" when there's multiple names for that job, but that's not the huge issue... and i can probably figure that one out on my own... but maybe not. probably will just have to make another query inside the "foreach" that checks numrows for multiples of that ID number and echo accordingly.)

 

i suppose i could use either "join()" or "implode()" if i could turn the first, last, and suffix into a string, then for each job make a new array out of the strings THEN implode but that seems pretty long-winded.

Link to comment
Share on other sites

I would suggest that you build a string as you go when you do this part:

<?php
		foreach($creators as $creator){
			if($creator['Fname'] !=Null){
				echo " ".$creator['Fname']."";
			}
			if($creator['Lname'] !=Null){
				echo " ".$creator['Lname']."";
			}
			if($creator['suffix'] !=Null){
				echo " ".$creator['suffix']."";
			}
		}
?>

 

Where you add a comma after each part of the name, and then strip it out if the next part is not null. Something like:

 

<?php
if($creator['Fname'] !=Null){
$name = $creator['Fname'].',';
}
if($creator['Lname'] !=Null){
$name = substr_replace($name,' '.$creator['Lname'],strlen($name)-1).',';
}
if($creator['suffix'] !=Null){
$name = substr_replace($name,' '.$creator['suffix'],strlen($name)-1).',';
}
echo $name;

 

Edit: Hang on, this needs modifying slightly.

Link to comment
Share on other sites

I would suggest that you build a string as you go when you do this part:

 

Where you add a comma after each part of the name, and then strip it out if the next part is not null. Something like:

 

Edit: Hang on, this needs modifying slightly.

 

interesting method... before you made the edit to "hang on" i was going to say it would probably end up with a comma on the end of everything though:

 

Editor: Len Wein,

 

Writer: Gerry Conway,

 

Penciller: Ross Andru,

 

Inker: Mike Esposito, David Hunt,

 

i guess i would only build the string like this after doing a numrows count and finding out if it's necessary - this would also get me to add the "s" after "Inker" so two birds with one stone. otherwise just straight-up echo. i'll experiment with this, thanks!

 

If you need to have a comma only if both are not null do this:

 

if(($creator['Lname'] !=Null) && ($creator['suffix'] !=Null)){

echo ",";

}

 

Try that and let me know

 

i only need to add a comma if there are multiple names for each job, so

 

Editor: Len Wein

 

needn't a comma, whereas

 

Inker: Mike Esposito David Hunt

 

does, after "Esposito". but unfortunately i have the "suffix" as well, so i can't just automatically place the comma after the last name.

Link to comment
Share on other sites

I forgot that if one of them is null, the last character wouldn't be a comma. So this now checks to see if there is a comma in the string. If there isn't, it simply appends the current part(first name, last name or suffix) to the end of the string. If there is, it replaces the comma with the current part.

 

<?php
if($creator['Fname'] !=Null){
$name = $creator['Fname'].',';
}
if($creator['Lname'] !=Null){
$name =(strpos($name,',')===false) ? $name .= ' '.$creator['Lname'].',' : substr_replace($name,' '.$creator['Lname'].',',strlen($name)-1);
}
if($creator['suffix'] !=Null){
$name =(strpos($name,',')===false) ? $name .= ' '.$creator['suffix'].',' : substr_replace($name,' '.$creator['suffix'].',',strlen($name)-1);
}

echo $name;
?>

Link to comment
Share on other sites

The easiest way to do this is to use a temporary array to hold the names. Then you can use implode on the temporary array.

 

<?php
     $tmp = array();
     foreach($creators as $creator){
               $tmp[] = implode(' ',$creator);
     }
     echo implode(',',$tmp);
?>

 

Ken

Link to comment
Share on other sites

I forgot that if one of them is null, the last character wouldn't be a comma. So this now checks to see if there is a comma in the string. If there isn't, it simply appends the current part(first name, last name or suffix) to the end of the string. If there is, it replaces the comma with the current part.

 

<?php
if($creator['Fname'] !=Null){
$name = $creator['Fname'].',';
}
if($creator['Lname'] !=Null){
$name =(strpos($name,',')===false) ? $name .= ' '.$creator['Lname'].',' : substr_replace($name,' '.$creator['Lname'].',',strlen($name)-1);
}
if($creator['suffix'] !=Null){
$name =(strpos($name,',')===false) ? $name .= ' '.$creator['suffix'].',' : substr_replace($name,' '.$creator['suffix'].',',strlen($name)-1);
}

echo $name;
?>

 

as i suspected, this gives me commas at the end of every name, but it's the closest i've gotten yet.

 

 

The easiest way to do this is to use a temporary array to hold the names. Then you can use implode on the temporary array.

 

<?php
     $tmp = array();
     foreach($creators as $creator){
               $tmp[] = implode(' ',$creator);
     }
     echo implode(',',$tmp);
?>

 

Ken

 

this would easily work if the only things in the array were the Fname, Lname and suffix, but i've got a whole lot of other stuff in there as well. i might have to resort to multiple queries to break down the info into bite-size chunks. easier to swallow that way.

Link to comment
Share on other sites

you wont to add comma if is not new cat_name and before 1st part of creator name

try

<?php
$creatorQuery = mysql_query("SELECT * FROM ComicCreators, Creators, CreatorCat WHERE ComicCreators.issueID = '".$ComicIssues['ID']."' AND ComicCreators.creatorID = Creators.ID AND ComicCreators.creatorCatID = CreatorCat.ID ORDER BY CreatorCat.ID");
$creatorNumRows = mysql_num_rows($creatorQuery);
if($creatorNumRows > 0) {
while($row = mysql_fetch_array($creatorQuery)){ $creators[$row['catName']][] = $row;}
foreach($creators as $creatorCat => $creators) {
	echo "<p><strong>".$creatorCat.":</strong>";
	$is_new_cat = true;
	foreach($creators as $creator){
		$first_part_of_creator_name = true;
		if($creator['Fname'] !=Null){
			if ($first_part_of_creator_name and !$is_new_cat) echo ',';
			$first_part_of_creator_name = false;
			$is_new_cat = false;
			echo " ".$creator['Fname']."";
		}
		if($creator['Lname'] !=Null){
			if ($first_part_of_creator_name and !$is_new_cat) echo ',';
			$first_part_of_creator_name = false;
			$is_new_cat = false;
			echo " ".$creator['Lname']."";
		}
		if($creator['suffix'] !=Null){
			if ($first_part_of_creator_name and !$is_new_cat) echo ',';
			$first_part_of_creator_name = false;
			$is_new_cat = false;
			echo " ".$creator['suffix']."";
		}	
	}
	echo "</p>\n";
} 
} else { echo "\t\t\t\t\t<p>No creative team information available.</p>\n";}
?>

Link to comment
Share on other sites

HOLY CRAP! now THAT's some CODIN'! that did it, thanks sasa! i think i'll try to turn that into a function though, in order to cut down on the code on the page.

 

and thanks to everyone else that brain stormed with me. i hope your headaches go away as fast as mine does.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.