Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

gthartanto's avatar

datatables server-side render | how to using implode() for returns a string of an array ?

get json data :

public function get(Request $request){
	$columns = array(
		0 => 'id',
		1 => 'name',
		2 => 'guard_name',
		3 => 'permissions',
		4 => 'action',
	);

	$totalData = Role::where('name', '!=', 'super-admin')->count();
	$limit = $request->input('length');
	$start = $request->input('start');
	$order = $columns[$request->input('order.0.column')];
	$dir = $request->input('order.0.dir');

	if(empty($request->input('search.value'))){
		$roles = Role::where('name', '!=', 'super-admin')->offset($start)
			->limit($limit)
			->orderBy($order,$dir)
			->get();
		$totalFiltered = Role::where('name', '!=', 'super-admin')->count();
	}else{
		$search = $request->input('search.value');
		$roles = Role::where('name', '!=', 'super-admin')->where('name', 'like', "%{$search}%")
			->offset($start)
			->limit($limit)
			->orderBy($order, $dir)
			->get();
		$totalFiltered = Role::where('name', '!=', 'super-admin')->where('name', 'like', "%{$search}%")
			->count();
	}

	$data = array();

	if($roles){
		foreach($roles as $value){
			$nestedData['id'] = $value->id;
			$nestedData['name'] = $value->name;
			$nestedData['guard_name'] = $value->guard_name;
            foreach ($value->permissions as $item) {
                $nestedData['permissions'][] = $item->name;
            }
			$nestedData['action'] = "<a href='#edit' class='btn btn-warning'>Sync</a>";
			$data[] = $nestedData;
		}
	}

	$json_data = array(
		"draw"			=> intval($request->input('draw')),
		"recordsTotal"	=> intval($totalData),
		"recordsFiltered" => intval($totalFiltered),
		"data"			=> $data
	);

the output "permissions" always contains commas ","

example : "delete-posts,edit-posts,create-posts,manage-posts".

#question : how to change that commas into other letter ? using implode() ?

from : "delete-posts,edit-posts,create-posts,manage-posts".

to : delete-posts | edit-posts | create-posts | manage-posts.

0 likes
4 replies
PeterBosch's avatar

So, assuming you would want to use implode() instead of str_replace (or preg_replace):

// This explodes the $permissions string into an array, then implodes it with a pipe character
$permissions = implode('|', explode(',', $permissions));

// Or, using str_replace:
$permissions = str_replace(',', '|', $permissions);

Does that help?

gthartanto's avatar

@PeterBosch I've tried both of your suggestions. but the result remains the same.

or am I wrong in placing it? https://snipboard.io/5fMpvN.jpg

	$data = array();

	if($roles){
		foreach($roles as $key => $value){
			$routeEdit = route('bo.permissions.edit', $value->id);
			$routeDelete = route('bo.permissions.delete', $value->id);
			$nestedData['id'] = $value->id;
			$nestedData['name'] = $value->name;
			$nestedData['guard_name'] = $value->guard_name;
            foreach ($value->permissions as $key => $item) {
                // IMPLODE() HERE !!
                $nestedData['permissions'][] = implode('|', explode(',', $item->name));
                // $nestedData['permissions'][] = str_replace(',', '|', $item->name);
            }
			$nestedData['action'] = "
			<div class='btn-group-sm text-center align-middle text-nowrap'>
				<a href='{$routeEdit}' class='btn btn-primary rounded-pill'><i class='uil-edit-alt' aria-hidden='true'></i></a>
				<a href='_delete : {$value->name} ?' class='btn btn-danger rounded-pill deleteAtlet' data-id='{$value->id}' data-action='{$routeDelete}'><i class='uil-trash-alt' aria-hidden='true'></i></a>
			</div>";
			$data[] = $nestedData;
		}
	}

	$json_data = array(
		"draw"			=> intval($request->input('draw')),
		"recordsTotal"	=> intval($totalData),
		"recordsFiltered" => intval($totalFiltered),
		"data"			=> $data
	);

	echo json_encode($json_data);
PeterBosch's avatar
Level 2

@gthartanto You might be looking at the wrong place, as the following code proves that it would work:

$permissions = 'delete-posts,edit-posts,create-posts,manage-posts';
var_dump($permissions);
// string(49) "delete-posts,edit-posts,create-posts,manage-posts"

$newPermissions = implode('|', explode(',', $permissions));
var_dump($newPermissions);
// string(49) "delete-posts|edit-posts|create-posts|manage-posts"
gthartanto's avatar

@PeterBosch yeah, it's works

$nestedData['permissions'] = implode(' | ', array_filter($value->getPermissionNames()->toArray()));

thanks

Please or to participate in this conversation.