combine array if any value is found duplicates php - php

I am working with a one dimensional array in PHP. I would like to detect the presence of duplicate values, then count the number of duplicate values and out put the results. For example, given the following array:
Original Array:
Array
{
"OrderId": "1",
"ProductOrderedId": "1",
"CallerId": "1",
},
{
"OrderId": "2",
"ProductOrderedId": "2",
"CallerId": "2",
},
{
"OrderId": "2",
"ProductOrderedId": "3",
"CallerId": "2",
}
}
Expected Result:
Array
{
"OrderId": "1",
"ProductOrderedId": "1",
"CallerId": "1",
},
{
"OrderId": "2",
"ProductOrderedId": "2,3",
"CallerId": "2",
}
}

try this code hope this helpful for you.
$newArrayData = array();
$valuesProduct = array();
foreach ($fetchData as $key => $value) {
if (count($value) > 1) {
foreach ($value as $keys => $vals) {
$valuesProduct[] = $vals['ProductOrderedId'];
}
$implodeVal=implode(',',$valuesProduct);
$newArrayData[]= array('OrderId' => $value[0]['OrderId'], 'CallerId' => $value[0]['CallerId'],
"ProductOrderedId" => $implodeVal);
} else {
$newArrayData[]=array('OrderId' => $value[0]['OrderId'], 'CallerId' => $value[0]['CallerId'],
"ProductOrderedId" => $value[0]['ProductOrderedId']);
}
}
print_r($newArrayData);

you also can use this if you find it simple.
$values = array(
array(
"OrderId"=> "1",
"ProductOrderedId"=> "1",
"CallerId"=> "1",
),
array(
"OrderId"=> "4",
"ProductOrderedId"=> "2",
"CallerId"=> "2",
),
array(
"OrderId"=> "4",
"ProductOrderedId"=> "3",
"CallerId"=> "2",
)
);
$temp=array();
foreach ($values as $value) {
if(isset($temp[$value["OrderId"]])){
$temp[$value["OrderId"]]["ProductOrderedId"]=$temp[$value["OrderId"]]["ProductOrderedId"].",".$value["ProductOrderedId"];
}else{
$temp[$value["OrderId"]]=$value;
}
}
$final_array= array_values($temp);

Related

Php json_encode array and object array

I need to create a json with this format:
{
"reservs": [
{
"ResId": "58",
"time": "2020-05-15 19:41:50",
"boxEntering": null,
"boxClosing": null,
"active": "1",
"UserId": "29",
"BoxId": "4",
"boxPlace": null,
"box": {
"id": "4",
"Nom": "Hortillonages",
"Lat": "49.8953",
"Lng": "2.31034",
"place": "0",
"placeMax": "9"
}
}
]
}
in entries, a $header who check the user token(not use for my problem)
$table the table returned from PDO::FETCHASSOC from sql SELECT request
My php code:
function generateJson($table, headerChecker $header){
$final = array();
foreach ($table as $item) {
$box = array(
"id" => $item["id"],
"Nom" => $item["Nom"],
"Lat" => $item["Lat"],
"Lng" => $item["Lng"],
"place" => $item["place"],
"placeMax" => $item["placeMax"]
);
$reserv = array(
"ResId" => $item["ResId"],
"time" => $item["time"],
"boxEntering" => $item["boxEntering"],
"boxClosing" => $item["boxClosing"],
"active" => $item["active"],
"UserId" => $item["UserId"],
"BoxId" => $item["BoxId"],
"boxPlace" => $item["boxPlace"],
);
$reserv["box"] = $box;
array_merge($final,$reserv);
}
$arr = array("reservs" => $table);
$header->tokenJson($arr);
echo json_encode($arr);
}
I have this result
{"reservs": [
{
"ResId": "58",
"time": "2020-05-15 19:41:50",
"boxEntering": null,
"boxClosing": null,
"active": "1",
"UserId": "29",
"BoxId": "4",
"boxPlace": null,
"id": "4",
"Nom": "Hortillonages",
"Lat": "49.8953",
"Lng": "2.31034",
"place": "0",
"placeMax": "9",
"QRID": "",
"boxToken": ""
}]
}
I think the Json format eror is in the array_merge function.
What add array function can I use to not remove the Box object
Your problem is that you are not assigning the return of array_merge and using the wrong variable $table. Just dynamically append to $final:
foreach ($table as $item) {
// this all appears good
//
$reserv["box"] = $box;
$final[] = $reserv; // append to $final
}
$arr = array("reservs" => $final); // use $final
$header->tokenJson($arr);
echo json_encode($arr);
Merge the new $reserv into $final and assign it to $final, then use $final.
Try this one
function generateJson($table, headerChecker $header){
$final = array();
foreach ($table as $item) {
$box = array(
"id" => $item["id"],
"Nom" => $item["Nom"],
"Lat" => $item["Lat"],
"Lng" => $item["Lng"],
"place" => $item["place"],
"placeMax" => $item["placeMax"]
);
$reserv = array(
"ResId" => $item["ResId"],
"time" => $item["time"],
"boxEntering" => $item["boxEntering"],
"boxClosing" => $item["boxClosing"],
"active" => $item["active"],
"UserId" => $item["UserId"],
"BoxId" => $item["BoxId"],
"boxPlace" => $item["boxPlace"],
);
$reserv["box"] = $box;
$final[] = $reserv;
}
$arr = array("reservs" => $final);
$header->tokenJson($arr);
echo json_encode($arr);
}

how to remove specific key from multidimension array

This is what the result i need to come out with
"data": [
{
"ticket_category_id": "677",
"ticket_category_name": " Testing 500",
"ticket_category_order": "1",
"tickets":
[
{
"ticket_id": "927",
"ticket_title": "EDI Project Template with attachments",
"ticket_order": "1",
"due_date": "0000-00-00 00:00:00",
"created_date": "2018-05-16 10:01:04",
"edited_date": "2018-05-17 02:56:38",
"updated_date": "2018-05-17 02:56:38",
"is_complete": "0",
"total_comment": "0",
"total_attachment": "10",
"total_checklist_items": "48",
"total_completed_checklist_items": "0",
"label": [
{
"ticket_label_name": "",
"ticket_color_code": "#FF3B30"
},
"#D4891C": {
"ticket_label_name": "IN PROGRESS",
"ticket_color_code": "#D4891C"
}]
},
"people": []
},
{
"ticket_id": "928",
"ticket_title": "EDI Project Template",
"ticket_order": "2",
"due_date": "0000-00-00 00:00:00",
"created_date": "2018-05-16 10:01:04",
"edited_date": "0000-00-00 00:00:00",
"updated_date": "0000-00-00 00:00:00",
"is_complete": "0",
"total_comment": "0",
"total_attachment": "0",
"total_checklist_items": "48",
"total_completed_checklist_items": "0",
"label": [
{
"ticket_label_name": "",
"ticket_color_code": "#4CD964"
}]
},
"people": []
}
]
But what i get the result is like below
{
"data": [
{
"ticket_category_id": "677",
"ticket_category_name": " Testing 500",
"ticket_category_order": "1",
"tickets": {
"927": {
"ticket_id": "927",
"ticket_title": "EDI Project Template with attachments",
"ticket_order": "1",
"due_date": "0000-00-00 00:00:00",
"created_date": "2018-05-16 10:01:04",
"edited_date": "2018-05-17 02:56:38",
"updated_date": "2018-05-17 02:56:38",
"is_complete": "0",
"total_comment": "0",
"total_attachment": "10",
"total_checklist_items": "48",
"total_completed_checklist_items": "0",
"label": {
"#FF3B30": {
"ticket_label_name": "",
"ticket_color_code": "#FF3B30"
}
},
"people": []
}
}
},
{
"ticket_category_id": "677",
"ticket_category_name": " Testing 500",
"ticket_category_order": "1",
"tickets": {
"927": {
"ticket_id": "927",
"ticket_title": "EDI Project Template with attachments",
"ticket_order": "1",
"due_date": "0000-00-00 00:00:00",
"created_date": "2018-05-16 10:01:04",
"edited_date": "2018-05-17 02:56:38",
"updated_date": "2018-05-17 02:56:38",
"is_complete": "0",
"total_comment": "0",
"total_attachment": "10",
"total_checklist_items": "48",
"total_completed_checklist_items": "0",
"label": {
"#D4891C": {
"ticket_label_name": "IN PROGRESS",
"ticket_color_code": "#D4891C"
}
},
"people": []
}
}
},
And below is the code I have done, I using php mysql one to many relationship get all the data to be flat array, and then below code is convert single flat array into three multidimension array, but i meet a bottleneck. Please help to review my code to point out which part I need to change to become my expected result.
$result = array();
foreach($total_count as $Key => $Value){
$ticketCatId = $Value['ticket_category_id'];
$ticketId = $Value['ticket_id'];
$ticketColorCode = $Value['ticket_color_code'];
$ticketMember = $Value['user_id'];
$result[$ticketCatId]['ticket_category_id'] = $Value['ticket_category_id'];
$result[$ticketCatId]['ticket_category_name'] = $Value['ticket_category_name'];
$result[$ticketCatId]['ticket_category_order'] = $Value['ticket_category_order'];
if(!isset($result[$ticketCatId]['tickets'])) {
$result[$ticketCatId]['tickets'] = array();
}
// this code is append the ticket ID
if($ticketId && !isset($result[$ticketCatId]['tickets'][$ticketId])) {
$ticket = array(
'ticket_id' => $Value['ticket_id'],
'ticket_title' => $Value['ticket_title'],
'ticket_order' => $Value['ticket_order'],
'due_date' => $Value['due_date'],
'created_date' => $Value['created_date'],
'edited_date' => $Value['edited_date'],
'updated_date' => $Value['updated_date'],
'is_complete' => $Value['is_complete'],
'total_comment' => $Value['total_comment'],
'total_attachment' => $Value['total_attachment'],
'total_checklist_items' => $Value['total_checklist_items'],
'total_completed_checklist_items' => $Value['total_completed_checklist_items'],
'label' => array(),
'people' => array()
);
$result[$ticketCatId]['tickets'][$ticketId] = $ticket;
}
if($ticketColorCode && isset($result[$ticketCatId]['tickets'][$ticketId]) && !isset($result[$ticketCatId]['tickets'][$ticketId]['label'][$ticketColorCode])) {
$ticketColor = array(
'ticket_label_name' => $Value['ticket_label_name'],
'ticket_color_code' => $Value['ticket_color_code']
);
$result[$ticketCatId]['tickets'][$ticketId]['label'][$ticketColorCode] = $ticketColor;
}
if($ticketMember && isset($result[$ticketCatId]['tickets'][$ticketId]) && !isset($result[$ticketCatId]['tickets'][$ticketId]['people'][$ticketMember])) {
$ticketPeople = array(
'user_id' => $Value['user_id'],
'photo' => $Value['photo']
);
$result[$ticketCatId]['tickets'][$ticketId]['people'][$ticketMember] = $ticketPeople;
}
}
dd(json_encode(["data"=>$result]));
I don't have any sample data to work with, so I can't actually test this for you. The general idea though is that each time through the loop, you initialize a temporary array ($tmpArray = array();) and put all the loop-specific values into that array. Then, at the end of each loop iteration, you push that temporary array onto your $results array ($result[] = $tmpArray;), allowing PHP to automatically create sequential indexes for $results. The reason why you are getting nested JSON objects currently is because json_encode() will only produce JSON arrays from sequentially-index PHP arrays
$result = array();
foreach($total_count as $Key => $Value){
$ticketCatId = $Value['ticket_category_id'];
$ticketId = $Value['ticket_id'];
$ticketColorCode = $Value['ticket_color_code'];
$ticketMember = $Value['user_id'];
$tmpArray = array();
$tmpArray['ticket_category_id'] = $Value['ticket_category_id'];
$tmpArray['ticket_category_name'] = $Value['ticket_category_name'];
$tmpArray['ticket_category_order'] = $Value['ticket_category_order'];
if(!isset($tmpArray['tickets'])) {
$tmpArray['tickets'] = array();
}
// this code is append the ticket ID
if($ticketId && !isset($tmpArray['tickets'][$ticketId])) {
$ticket = array(
'ticket_id' => $Value['ticket_id'],
'ticket_title' => $Value['ticket_title'],
'ticket_order' => $Value['ticket_order'],
'due_date' => $Value['due_date'],
'created_date' => $Value['created_date'],
'edited_date' => $Value['edited_date'],
'updated_date' => $Value['updated_date'],
'is_complete' => $Value['is_complete'],
'total_comment' => $Value['total_comment'],
'total_attachment' => $Value['total_attachment'],
'total_checklist_items' => $Value['total_checklist_items'],
'total_completed_checklist_items' => $Value['total_completed_checklist_items'],
'label' => array(),
'people' => array()
);
$tmpArray['tickets'][$ticketId] = $ticket;
}
if($ticketColorCode && isset($tmpArray['tickets'][$ticketId]) && !isset($tmpArray['tickets'][$ticketId]['label'][$ticketColorCode])) {
$ticketColor = array(
'ticket_label_name' => $Value['ticket_label_name'],
'ticket_color_code' => $Value['ticket_color_code']
);
$tmpArray['tickets'][$ticketId]['label'][$ticketColorCode] = $ticketColor;
}
if($ticketMember && isset($tmpArray['tickets'][$ticketId]) && !isset($tmpArray['tickets'][$ticketId]['people'][$ticketMember])) {
$ticketPeople = array(
'user_id' => $Value['user_id'],
'photo' => $Value['photo']
);
$tmpArray['tickets'][$ticketId]['people'][$ticketMember] = $ticketPeople;
}
$result[] = $tmpArray;
}
dd(json_encode(["data"=>$result]));

Creating nested JSON using PHP MySQL

I have an SQL Query returning certain fields, I am using json_encode() to get the data in JSON format, however I am having trouble getting it in the format I want.
PHP Code
<?php
function data() {
$runDistanceBasedOnCityQuery = "SELECT rc.id, rc.cityId, c.cityName, rc.runId, r.distance, rc.status FROM run_city rc INNER JOIN cities c ON c.id = rc.cityId INNER JOIN run_distance r ON r.id = rc.runId ORDER BY c.cityName";
$runDistanceBasedOnCityResult = $db->prepare($runDistanceBasedOnCityQuery);
$runDistanceBasedOnCityResult->bindParam(":cityId", $cityId, PDO::PARAM_INT);
$runDistanceBasedOnCityResult->execute();
$runDistanceBasedOnCityOutput = $runDistanceBasedOnCityResult->rowCount();
if ($runDistanceBasedOnCityOutput > 0) {
while ($runDistanceBasedOnCityRow = $runDistanceBasedOnCityResult->fetch(PDO::FETCH_ASSOC)) {
$array1 = array($runDistanceBasedOnCityRow['runId'], $runDistanceBasedOnCityRow['distance'], $runDistanceBasedOnCityRow['status']);
for ($i = 0; $i < sizeof($array1); $i++) {
$array2 = array("id" => $runDistanceBasedOnCityRow['id'], "runId" => $runDistanceBasedOnCityRow['cityId'], $runDistanceBasedOnCityRow['cityName'] => $array1);
}
$finalResultRunDistanceBasedOnCity[] = $array2;
}
$responseRunDistanceBasedOnCity = $finalResultRunDistanceBasedOnCity;
} else {
$responseRunDistanceBasedOnCity = 'Runs not found';
}
$result = array("status" => true,
"runsBasedOnCity" => $responseRunDistanceBasedOnCity
);
json($result);
}
function json($data) {
header('Content-Type:application/json');
if (is_array($data)) {
echo json_encode($data);
}
}
?>
The JSON format I am getting
"runsBasedOnCity": [
{
"id": "1",
"runId": "1",
"Bengaluru": [
"2",
"10k",
"1"
]
},
{
"id": "2",
"runId": "1",
"Bengaluru": [
"1",
"5k",
"1"
]
},
{
"id": "3",
"runId": "1",
"Bengaluru": [
"5",
"3k",
"0"
]
},
{
"id": "4",
"runId": "2",
"Chennai": [
"1",
"5k",
"1"
]
},
{
"id": "5",
"runId": "2",
"Chennai": [
"2",
"10k",
"1"
]
},
{
"id": "6",
"runId": "2",
"Chennai": [
"4",
"15k",
"1"
]
}
]
The Format I Require
"runsBasedOnCity": [
{
"id": "1",
"cityId": "1",
"Bengaluru":
[
{
runId : "2",
distance : "10k",
status : "1"
},
{
runId : "1",
distance: "5k",
status : "1"
},
{
runId : "5",
distance : "3k",
status : "0"
}
]
},
{
"id": "2",
"cityId": "2",
"Chennai":
[
{
runId : "1",
distance : "5k",
status : "1"
},
{
runId : "2",
distance: "10k",
status : "1"
},
{
runId : "4",
distance : "15k",
status : "1"
}
]
}
I am not able to figure out a better way of doing this, I am fairly new to this, do help me out. Thanks !
To efficiently group the subarray data, you should implement temporary keys. cityId is a suitable value to group by -- because cityNames may intentionally duplicate in the future but cityId must never un/intentionally duplicate in your database table.
When each new cityId is encountered, the conditional isset() call will determine whether a new/full set of data should be stored, or if data should merely be appended to the subarray.
I am calling array_slice() since it cuts down on unnecessary syntax / code-bloat.
After iterating through all of the rows, you can reindex the $result array, nest it inside runBasedOnCity, and add the status element.
I'll show my demo with PRETTY_PRINT so that it is easier to read, but in your actual code, you should remove the parameter. Also, a word of advice -- try to keep your variable names brief for improved readability.
Code: (Demo)
$resultset = [
["id" => "1", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "2", "distance" => "10k", "status" => "1"],
["id" => "2", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "1", "distance" => "5k", "status" => "1"],
["id" => "3", "cityId" => "1", "cityName" => "Bengaluru", "runId" => "5", "distance" => "3k", "status" => "0"],
["id" => "4", "cityId" => "2", "cityName" => "Chennai", "runId" => "1", "distance" => "5k", "status" => "1"],
["id" => "5", "cityId" => "2", "cityName" => "Chennai", "runId" => "2", "distance" => "10k", "status" => "1"],
["id" => "6", "cityId" => "2", "cityName" => "Chennai", "runId" => "4", "distance" => "15k", "status" => "1"]
];
foreach ($resultset as $row) {
if (!isset($result[$row["cityId"]])) {
$result[$row["cityId"]] = array("id" => $row["id"], "cityId" => $row["cityId"], $row["cityName"] => array(array_slice($row,-3)));
} else {
$result[$row['cityId']][$row["cityName"]][] = array_slice($row,-3);
}
}
if (!isset($result)) { // don't need to check rowCount() at all
$result = 'Runs not found';
} else {
$result = array_values($result);
}
$result = array("status" => true, "runsBasedOnCity" => $result);
var_export(json_encode($result, JSON_PRETTY_PRINT));
Output:
'{
"status": true,
"runsBasedOnCity": [
{
"id": "1",
"cityId": "1",
"Bengaluru": [
{
"runId": "2",
"distance": "10k",
"status": "1"
},
{
"runId": "1",
"distance": "5k",
"status": "1"
},
{
"runId": "5",
"distance": "3k",
"status": "0"
}
]
},
{
"id": "4",
"cityId": "2",
"Chennai": [
{
"runId": "1",
"distance": "5k",
"status": "1"
},
{
"runId": "2",
"distance": "10k",
"status": "1"
},
{
"runId": "4",
"distance": "15k",
"status": "1"
}
]
}
]
}'
After explaining how you wanted to preserve the id values in the subarrays, here is that solution:
Code: (Demo)
foreach ($resultset as $row) {
if (!isset($result[$row["cityId"]])) {
$result[$row["cityId"]] = array("cityId" => $row["cityId"], $row["cityName"] => array(array("id" => $row["id"])+array_slice($row,-3)));
} else {
$result[$row['cityId']][$row["cityName"]][] = array("id" => $row["id"])+array_slice($row,-3);
}
}
if (!isset($result)) { // don't need to check rowCount() at all
$result = 'Runs not found';
} else {
$result = array_values($result);
}
$result = array("status" => true, "runsBasedOnCity" => $result);
var_export(json_encode($result, JSON_PRETTY_PRINT));

PHP - Moving a key within an array and flatten it

I have this array of object:
[
{
"id": 1,
"name": "Carbo",
"menus": [
{
"id": 33,
"name": "FloralWhite",
"image": {
"web": "https://lorempixel.com/640/360/food/?89722",
"mobile": "https://lorempixel.com/640/360/food/?89722",
"square": "https://lorempixel.com/640/360/food/?89722"
},
"logs": {
"price": 2
}
},
{
"id": 40,
"name": "LightGray",
"image": {
"web": "https://lorempixel.com/640/360/food/?63930",
"mobile": "https://lorempixel.com/640/360/food/?63930",
"square": "https://lorempixel.com/640/360/food/?63930"
},
"logs": {
"price": 2
}
},
]
}
]
What I want to achieve:
[
{
"id": 1,
"name": "Carbo",
"menus": [
{
"id": 33,
"name": "FloralWhite",
"image": {
"web": "https://lorempixel.com/640/360/food/?89722",
"mobile": "https://lorempixel.com/640/360/food/?89722",
"square": "https://lorempixel.com/640/360/food/?89722"
},
"price": 2
},
{
"id": 40,
"name": "LightGray",
"image": {
"web": "https://lorempixel.com/640/360/food/?63930",
"mobile": "https://lorempixel.com/640/360/food/?63930",
"square": "https://lorempixel.com/640/360/food/?63930"
},
"price": 2
},
]
}
]
I've tried using laravel collection flatten with depth but it fail
$data = collect($data->menus);
$data = $data->flatten(1);
$data->values()->all();
How can I flatten the menus['logs'] object so it can one level with menu?
Something like this should do the trick. Simply iterate over your array, set the new property and remove the one you don't want.
$data = json_decode("[{
\"id\": 1,
\"name\": \"Carbo\",
\"menus\": [
{
\"id\": 33,
\"name\": \"FloralWhite\",
\"image\": {
\"web\": \"https://lorempixel.com/640/360/food/?89722\",
\"mobile\": \"https://lorempixel.com/640/360/food/?89722\",
\"square\": \"https://lorempixel.com/640/360/food/?89722\"
},
\"logs\": {
\"price\": 2
}
},
{
\"id\": 40,
\"name\": \"LightGray\",
\"image\": {
\"web\": \"https://lorempixel.com/640/360/food/?63930\",
\"mobile\": \"https://lorempixel.com/640/360/food/?63930\",
\"square\": \"https://lorempixel.com/640/360/food/?63930\"
},
\"logs\": {
\"price\": 2
}
}
]
}]");
foreach($data as $val){
foreach($val->menus as $menuVal){
$menuVal->price = $menuVal->logs->price;
unset($menuVal->logs);
}
}
#Stefen Suhat i really don't know what is the syntax for laravel but i did it with a simple php foreach() hope this will help you, as your array's depth is long so i had gone to all the levels of your array, check code and output snippet here https://eval.in/806879
try below one:
<?php
$array = array(
array(
"id"=> 1,
"name"=> "Carbo",
"menus"=> array(
array(
"id"=> 33,
"name"=> "FloralWhite",
"image"=> array(
"web"=> "https=>//lorempixel.com/640/360/food/?89722",
"mobile"=> "https=>//lorempixel.com/640/360/food/?89722",
"square"=> "https=>//lorempixel.com/640/360/food/?89722"
),
"logs"=> array(
"price"=> 2
)
),
array(
"id"=> 40,
"name"=> "LightGray",
"image"=> array(
"web"=> "https=>//lorempixel.com/640/360/food/?63930",
"mobile"=> "https=>//lorempixel.com/640/360/food/?63930",
"square"=> "https=>//lorempixel.com/640/360/food/?63930"
),
"logs"=> array(
"price"=> 2
)
),
)
)
);
foreach($array as $key => $value){
foreach ($value as $key1 => $value1) {
if(is_array($value1) && $key1 == "menus"){
foreach($value1 as $key2 => $value2) {
foreach ($value2 as $key3 => $value3) {
if(is_array($value3) && $key3 == "logs"){
unset($array[$key][$key1][$key2][$key3]);
$array[$key][$key1][$key2] = array_merge($array[$key][$key1][$key2], $value3);
}
}
}
}
}
}
echo "array after<br>";
echo "<pre>";
print_r($array); //your array after
?>

Replace null with empty string value in multidimensional array php

I have one multidimensional array with null key value. How to replace null to empty string in multidimensional array php ? my array is
"result": [
{
"id": "1",
"first_name": "Kishan",
"last_name": "Patel",
"profile_picture": null,
"email": "imkishanpatel107#gmail.com",
"birthdate": "1992-07-10",
"gender": "male",
"nickname": "KK",
"town": null,
"state": "58",
"bio": "123",
"zipcode": "395006",
"radius": "12356",
"favroiteteam": "2",
"latitude": "1.25456",
"longitude": "4.5658787",
"message_enable": "0",
"ratting_enable": "0",
"add_friend_enable": "0",
"interested_in": null,
"user_sport": [
{
"sport": {
"id": "3",
"name": "Basketball",
"image": "",
"no_of_player": "9",
"is_active": "1"
},
"sportPosition": {
"id": "1",
"sport_id": "3",
"position_name": "Point Guard"
},
"skill_level": {
"id": "1",
"name": "Novice"
}
},
{
"sport": {
"id": "2",
"name": "Baseball",
"image": "",
"no_of_player": "10",
"is_active": "1"
},
"sportPosition": {
"id": "6",
"sport_id": "2",
"position_name": "Pitcher"
},
"skill_level": {
"id": "3",
"name": "Advanced"
}
},
{
"sport": {
"id": "8",
"name": "Roller Hockey",
"image": "",
"no_of_player": "0",
"is_active": "1"
},
"sportPosition": {
"id": "15",
"sport_id": "8",
"position_name": "Forward"
},
"skill_level": {
"id": "1",
"name": "Novice"
}
}
]
}
]
Simply put a loop and check if null with foreach
foreach ($array as $key => $value) {
if (is_null($value)) $array[$key] = "";
}
#Kishan Kikani you can not replace null to '' because both consider as empty value that in the output of your array there will be empty value at the place of null or '' you have to assign something to replace your value in above array like below you have both ways(your and mine) you can do:
<?php
$result = array("result"=>
array(
"id"=> "1",
"first_name"=> "Kishan",
"last_name"=> "Patel",
"profile_picture"=> null,
"email"=> "imkishanpatel107#gmail.com",
"birthdate"=> "1992-07-10",
"gender"=> "male",
"nickname"=> "KK",
"town"=> null,
"state"=> "58",
"bio"=> "123",
"zipcode"=> "395006",
"radius"=> "12356",
"favroiteteam"=> "2",
"latitude"=> "1.25456",
"longitude"=> "4.5658787",
"message_enable"=> "0",
"ratting_enable"=> "0",
"add_friend_enable"=> "0",
"interested_in"=> null,
"user_sport"=>
array(
"sport"=> array(
"id"=> "3",
"name"=> "Basketball",
"image"=> "",
"no_of_player"=> "9",
"is_active"=> "1"
),
"sportPosition"=> array(
"id"=> "1",
"sport_id"=> "3",
"position_name"=> "Point Guard"
),
"skill_level"=> array(
"id"=> "1",
"name"=> "Novice"
)
),
array(
"sport"=> array(
"id"=> "2",
"name"=> "Baseball",
"image"=> "",
"no_of_player"=> "10",
"is_active"=> "1"
),
"sportPosition"=> array(
"id"=> "6",
"sport_id"=> "2",
"position_name"=> "Pitcher"
),
"skill_level"=> array(
"id"=> "3",
"name"=> "Advanced"
)
),
array(
"sport"=> array(
"id"=> "8",
"name"=> "Roller Hockey",
"image"=> "",
"no_of_player"=> "0",
"is_active"=> "1"
),
"sportPosition"=> array(
"id"=> "15",
"sport_id"=> "8",
"position_name"=> "Forward"
),
"skill_level"=> array(
"id"=> "1",
"name"=> "Novice"
)
)
)
);
echo "<pre>";
print_r($result); // BEFORE
foreach($result as $rsKey => $rs){
foreach($rs as $key => $value){
if(is_null($value)){
$result[$rsKey][$key] = "";
}
}
}
echo "<pre>";
print_r($result); // after replace only null to "" but there will be a empty space in the values
foreach($result as $rsKey => $rs){
foreach($rs as $key => $value){
if(is_array($value)){
foreach ($value as $k => $v) {
foreach ($v as $k1 => $v1) {
if(empty($v1)){
$result[$rsKey][$key][$k][$k1] = "level2";
}
}
}
}
else{
if(is_null($value)){
$result[$rsKey][$key] = "level1";
}
}
}
}
echo "<pre>";
print_r($result); // after replace whole array empty values
try any one you want (y)
$arr = array(
"key1"=>"value1",
"key2"=>null,
"key3"=>array(
"subkey1"=>null,
"subkey2"=>"subvalue2"),
"key4"=>null);
echo json_encode(replace_null_with_empty_string($arr));
function replace_null_with_empty_string($array)
{
foreach ($array as $key => $value)
{
if(is_array($value))
$array[$key] = replace_null_with_empty_string($value);
else
{
if (is_null($value))
$array[$key] = "";
}
}
return $array;
}
Piggybacking off #Atish's answer... I cleaned it up and made it simpler. This loops through the array and alters the value reference (&), then loops thru each next dimension of the array using recursion. #Daidon's answer only loops thru the first dimension.
The new function looks like this...
function null2empty($array){
foreach ($array as &$value) {
$value = (is_array($value)) ? null2empty($value) : $value;
$value = (is_null($value)) ? "" : $value;
}
return $array;
}
to use it, you would call it like this...
$profile_array = null2empty($profile_array);

Categories