[原] Json 数组之茴香豆的茴有几种写法

掘金 : juejin.im/post/6875651237573263368...

Php 在处理对象 / 数组之后会遇到对数据的返回, 这里就几种返回方式进行下说明

数据的处理以及返回

1. 引用返回

$collection = collect([
  'h' =>'John Doe',
  'n' => 'Jane Doe'
]);
$aim = [];
$aimWithKey = [];

// each 函数不能返回数据, 仅仅作为循环来使用
$collection->each(function ($value, $key) use (&$aim, &$aimWithKey) {
  // 不存在 Key
  $aim[] = $value.'-n';

  // 存在 Key
  $aimWithKey[$key] = $value.'-n';
});

dump($aim);

/*
array:2 [
  0 => "John Doe-n"
  1 => "Jane Doe-n"
]
*/

dump($aimWithKey);

/*
array:2 [
  "h" => "John Doe-n"
  "n" => "Jane Doe-n"
]
*/

2. 函数返回

$aim = collect();
$aimWithKey = collect();
$collection->each(function ($value, $key) use ($aim, $aimWithKey) {
  // 存在 KEY
  $aimWithKey->put($key, $value.'-f');

  // 不保留 Key
  $aim->push($value.'-p');
});

dump($aim);
/*
Illuminate\Support\Collection {#759
  #items: array:2 [
    0 => "John Doe-p"
    1 => "Jane Doe-p"
  ]
}
*/

dump($aimWithKey);

/*
Illuminate\Support\Collection {#764
  #items: array:2 [
    "h" => "John Doe-m"
    "n" => "Jane Doe-m"
  ]
}
*/

3. map 返回

$aim = $collection->map(function ($value) {
  return $value.'-m';
});
// 保留 KEY
dump($aim);
/*
Illuminate\Support\Collection {#764
  #items: array:2 [
    "h" => "John Doe-m"
    "n" => "Jane Doe-m"
  ]
}
*/

Json 在处理返回的时候

1. 数组在失去元素之后返回对象

$a = [1, 2, 3];
dump(json_encode($a));
// "[1,2,3]"

"{"a":1,"b":2}"
"{"b":2}"
"{}"

// 这里会造成数据的不连续, 导致返回为对象, 前端期望为 数组
unset($a[1]);
dump(json_encode($a));
// "{"0":1,"2":3}"

// 这里需要获取需要的值, 或者使用循环来做
dump(json_encode(collect($a)->values()));
// "[1,3]"

2. 对象在置空之后返回数组

$a = [
  'a' => 1,
  'b' => 2,
];
dump(json_encode($a));
// "{"a":1,"b":2}"

"{}"
unset($a['a']);
dump(json_encode($a));
// "{"b":2}"

// 这里置空之后返回数组
unset($a['b']);
dump(json_encode($a));
// []

// 需要对类型进行强制转换
dump(json_encode((object) $a));
// "{}"
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!