Dan Lee
Dan Lee

Reputation: 704

Convert "false" Value in JSON to empty string with PHP

I have a PHP script fetching items from the database and converting them to JSON format. It works great until it finds there is no value on an item. Where a field doesn't exist it renders the value of the field as 'false'.

How would I update the code below to check if there isn't a value and return an empty string instead of "false"?

Script

$Members = new PerchMembers_Members($API);
  $members = $Members->get_by_status('active'); // using method: PerchMembers_Members::get_by_status($status, $Paging=false)


  if (PerchUtil::count($members)) {
  $data = [];
  foreach ($members as $Member) {
    //prepare the data

    $data[] = array(
      'id' => $Member->memberID(),
      'Name' => $Member->first_name() . ' ' . $Member->last_name(),
      'Title' => $Member->member_title(),
      'First_Name' => $Member->first_name(),
      'Last_Name' => $Member->last_name(),
      'Company' => $Member->org_name(),
      'Company_Type' => $Member->org_type(),
      'Job' => $Member->job_title(),
      'Sector' => $Member->org_sector(),
      'Website' => 'http://' . $Member->org_website(),
      'Address' => implode(', ', array_filter(array($Member->address_one(), $Member->address_two(), $Member->address_town_city(), $Member->address_county_state(), $Member->address_country(), $Member->address_code(), ))),
      'Postcode' => $Member->address_code(),
      'Country' => $Member->address_country()
    );
  }
  }
  return json_encode($data, JSON_PRETTY_PRINT);

}

JSON EXAMPLE

  {
        "id": "76",
        "Name": "Billy Bob",
        "Title": false,
        "First_Name": "Billy",
        "Last_Name": "Bob",
        "Company": false,
        "Company_Type": false,
        "Job": false,
        "Sector": false,
        "Website": "http:\/\/",
        "Address": "",
        "Postcode": false,
        "Country": false
    },

Upvotes: 1

Views: 199

Answers (3)

Rafid
Rafid

Reputation: 681

you can concat the possible false variable with empty string like

$a = false;
$b = ''.$a; //$b will be an empty string

so your code will be

$data[] = array(
      'id' => ''.$Member->memberID(),
      'Name' => $Member->first_name() . ' ' . $Member->last_name(),
      'Title' => ''.$Member->member_title(),
      'First_Name' => ''.$Member->first_name(),
      'Last_Name' => ''.$Member->last_name(),
      'Company' => ''.$Member->org_name(),
      'Company_Type' => ''.$Member->org_type(),
      'Job' => ''.$Member->job_title(),
      'Sector' => ''.$Member->org_sector(),
      'Website' => 'http://' . $Member->org_website(),
      'Address' => implode(', ', array_filter(array($Member->address_one(), $Member->address_two(), $Member->address_town_city(), $Member->address_county_state(), $Member->address_country(), $Member->address_code(), ))),
      'Postcode' => ''.$Member->address_code(),
      'Country' => ''.$Member->address_country()
    );

Upvotes: 0

pablorsk
pablorsk

Reputation: 4276

Just do use (string) cast for a type convertion to string...

if (PerchUtil::count($members)) {
    $data = [];
    foreach ($members as $Member) {
        //prepare the data

        $data[] = array(
            'id' => (string)$Member->memberID(),
            'Name' => $Member->first_name() . ' ' . $Member->last_name(),
            'Title' => (string)$Member->member_title(),
            'First_Name' => (string)$Member->first_name(),
            'Last_Name' => (string)$Member->last_name(),
            'Company' => (string)$Member->org_name(),
            'Company_Type' => (string)$Member->org_type(),
            'Job' => (string)$Member->job_title(),
            'Sector' => (string)$Member->org_sector(),
            'Website' => 'http://' . $Member->org_website(),
            'Address' => implode(', ', array_filter(array($Member->address_one(), $Member->address_two(), $Member->address_town_city(), $Member->address_county_state(), $Member->address_country(), $Member->address_code(), ))),
            'Postcode' => (string)$Member->address_code(),
            'Country' => (string)$Member->address_country()
        );
    }
}

This is a solution without any problem if you use PHP 7, on the future, with strict_types mode enabled.

If you prefer a more clean or reusable code, you can do a function and filter data array on every foreach.

Upvotes: 0

Hyyan Abo Fakher
Hyyan Abo Fakher

Reputation: 3537

You can use the ternary operator ( ? : ) in PHP as a shorthand for “if / else”

$Members = new PerchMembers_Members($API);
  $members = $Members->get_by_status('active'); // using method: PerchMembers_Members::get_by_status($status, $Paging=false)


  if (PerchUtil::count($members)) {
  $data = [];
  foreach ($members as $Member) {
    //prepare the data

    $data[] = array(
      'id' => $Member->memberID(),
      'Name' => $Member->first_name() . ' ' . $Member->last_name(),
      'Title' => $Member->member_title() ? $Member->member_title() : "",
      'First_Name' => $Member->first_name(),
      'Last_Name' => $Member->last_name(),
      'Company' => $Member->org_name() ? $Member->org_name() : "",
      'Company_Type' => $Member->org_type() ? $Member->org_type() : "",
      'Job' => $Member->job_title() ? $Member->job_title() : "",
      'Sector' => $Member->org_sector() ? $Member->org_sector() : "",
      'Website' => 'http://' . $Member->org_website(),
      'Address' => implode(', ', array_filter(array($Member->address_one(), $Member->address_two(), $Member->address_town_city(), $Member->address_county_state(), $Member->address_country(), $Member->address_code(), ))),
      'Postcode' => $Member->address_code() ? $Member->address_code() : "",
      'Country' => $Member->address_country() ?  $Member->address_country() : ""
    );
  }
  }
  return json_encode($data, JSON_PRETTY_PRINT);

}

And result will be

 {
        "id": "76",
        "Name": "Billy Bob",
        "Title": "",
        "First_Name": "Billy",
        "Last_Name": "Bob",
        "Company": "",
        "Company_Type": "",
        "Job": "",
        "Sector": "",
        "Website": "http:\/\/",
        "Address": "",
        "Postcode": "",
        "Country": ""
    },

Upvotes: 1

Related Questions