Reputation: 704
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
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
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
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