tags:

views:

43

answers:

3

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']);
+7  A: 

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"
}
VolkerK
+1 perfect way to do it while i mis-read the question :)
Sarfraz
didn't work at all :(
snag
self-contained example added.
VolkerK
@snag: It works.
Sarfraz
@VolkerK are you showing me 2 examples because `$tags = preg_split('/,/', $_POST['tag'], -1, PREG_SPLIT_NO_EMPTY);` alone works. Thanks!
snag
@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.
JGB146
Ok, let me clarify/edit this....
VolkerK
A: 
//replace multiple commas
$tags = preg_replace('/,+/', ',', $_POST['tag']);
//explode
$tags = explode(',', $tags);
Haroldo
didn't work at all :(
snag
are you sure you're commas aren't encoded as entities?
Haroldo
Should be `explode(',', $tags)` and keeps the last empty element for the given string `",jay,john,,,bill,glenn,,,"`.
VolkerK
ah yes well spotted, should work fine now
Haroldo
still keeps the last empty element ;-)
VolkerK
A: 

function trim_each_array_element_value(&$value) { $value = trim($value); }

$array_new = array(); array_walk($array_old, 'trim_each_array_element_value'); foreach ($array_old as $tmp) { if($tmp && !empty($tmp) ) array_push($array_new, $tmp); }

print_r($array_new); //should show non empty elements

PradeepKr