我正在 Laravel 中工作,并尝试创建一个数据集以稍后进行 json_encode
这是我的数据数组
$o365_data = [];
$o365_data['o365_trigger_url'] = env('COMPLAINT_POWERAPP_URL');
$o365_data['completion_time'] = $complaint->created_at->format('d M Y - H:i:s');
$o365_data['submission_serial'] = $complaint->id;
foreach ($rules as $rule) {
$o365_data['rule_broken'][] = [ 'name' => $rule->name, ] ;
}
$o365_data['details'] = $complaint->details;
转储数组会导致这样的结果
array:11 [
"o365_trigger_url" => "https://azure.com/"
"completion_time" => "18 Sep 2023 - 11:08:43"
"submission_serial" => 60
"rule_broken" => array:2 [▼
0 => array:1 [▼
"name" => "Campaign expenditure: Candidate opportunity"
]
1 => array:1 [▼
"name" => "Campaign expenditure: Receipts and accounting"
]
]
"details" => "zbxcvbvxb"
]
如您所见,主数据数组内还有另一个数组值。所以我想将数组值转换为字符串值。
为了实现这一点,我编写了以下代码
foreach ($o365_data as $index => $data) {
if (is_array($data)) {
$implode_string = " ";
$o365_data[$index] = implode($implode_string, $data);
}
}
dd($o365_data);
**如何更正我的代码。
我希望将rule_broken值转换为字符串。**
"rule_broken" => "Campaign expenditure: Candidate opportunity , Campaign expenditure: Receipts and accounting"
发生这种情况是因为
rule_broken
是 2D。
您可以通过两种方式实现您想要的:
解决方案 1(针对您的用例):
foreach ($o365_data as $index => $data) {
if (is_array($data)) {
$values = array_map(function ($item) {
return $item['name'];
}, $data);
$o365_data[$index] = implode(', ', $values);
}
}
在上面的示例中,我们可以只解析您的示例,如果
name
键发生变化,或者我们想要像 o365_data
那样在 $o365_data['an_array'] = [1, 2, 3];
中拥有一个数组,则此代码是无用的。
解决方案2(递归):
您可以定义一个函数并将其命名为
implodeMyArray
:
function implodeMyArray($data, $implodeSeparator = ',') {
if (is_array($data)) {
foreach ($data as $key => $value) {
$data[$key] = implodeMyArray($value);
}
return implode($implodeSeparator, $data);
}
return $data;
}
然后在循环中调用此函数:
foreach ($o365_data as $index => $data) {
$o365_data[$index] = implodeMyArray($data);
}
第一个解决方案的问题将通过这个递归函数得到解决。