41

I was wondering how can I remove all empty values when I explode a string using PHP for example, lets say a user enters ",jay,john,,,bill,glenn,,,"?

Thanks in advance for the help.

Here is part of the code that explodes user submitted values.

$tags = explode(",", $_POST['tag']);
0

4 Answers 4

111

E.g. via array_filter() or by using the PREG_SPLIT_NO_EMPTY option on preg_split()

<?php
// only for testing purposes ...
$_POST['tag'] = ",jay,john,,,bill,glenn,,0,,";

echo "--- version 1: array_filter ----\n";
// note that this also filters "0" out, since (bool)"0" is FALSE in php
// array_filter() called with only one parameter tests each element as a boolean value
// see http://docs.php.net/language.types.type-juggling
$tags = array_filter( explode(",", $_POST['tag']) ); 
var_dump($tags);

echo "--- version 2: array_filter/strlen ----\n";
// this one keeps the "0" element
// array_filter() calls strlen() for each element of the array and tests the result as a boolean value
$tags = array_filter( explode(",", $_POST['tag']), 'strlen' ); 
var_dump($tags);

echo "--- version 3: PREG_SPLIT_NO_EMPTY ----\n";
$tags = preg_split('/,/', $_POST['tag'], -1, PREG_SPLIT_NO_EMPTY);
var_dump($tags);

prints

--- version 1: array_filter ----
array(4) {
  [1]=>
  string(3) "jay"
  [2]=>
  string(4) "john"
  [5]=>
  string(4) "bill"
  [6]=>
  string(5) "glenn"
}
--- version 2: array_filter/strlen ----
array(5) {
  [1]=>
  string(3) "jay"
  [2]=>
  string(4) "john"
  [5]=>
  string(4) "bill"
  [6]=>
  string(5) "glenn"
  [8]=>
  string(1) "0"
}
--- version 3: PREG_SPLIT_NO_EMPTY ----
array(5) {
  [0]=>
  string(3) "jay"
  [1]=>
  string(4) "john"
  [2]=>
  string(4) "bill"
  [3]=>
  string(5) "glenn"
  [4]=>
  string(1) "0"
}
Sign up to request clarification or add additional context in comments.

4 Comments

@VolkerK are you showing me 2 examples because $tags = preg_split('/,/', $_POST['tag'], -1, PREG_SPLIT_NO_EMPTY); alone works. Thanks!
@snag: Yes, he was showing two different ways to do it. The array_filter method he listed first is probably more standard, but as he mentioned, it could remove values you wanted to keep, so he included the preg_split method as an alternative.
The reason this isn't working for some is because it doesn't handle whitespace. ie.`a,b,c, ,d". For that, I recommend array_filter with a callback.
If you want to make sure your array is re-indexed then wrap it in array_values
4
$tags = array_diff(explode(",", $_POST['tag']),array(""));

Comments

0
//replace multiple commas
$tags = preg_replace('/,+/', ',', $_POST['tag']);
//explode
$tags = explode(',', $tags);

2 Comments

Should be explode(',', $tags) and keeps the last empty element for the given string ",jay,john,,,bill,glenn,,,".
still keeps the last empty element ;-)
-5

Simply try:

$tags = explode(", ", $_POST['tag']);

Adding space after comma, does the job!

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.