[原] Json 陣列之茴香豆的茴有幾種寫法

imvkmark發表於2020-09-23

掘金 : 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 協議》,轉載必須註明作者和本文連結

相關文章