我有一個在 php 7 中運行良好的函式,但在 php 8.0.11 中有警告
$orders->result = array_map('reset', $orders->result);
E_WARNING: reset(): Argument #1 ($array) must be passed by reference, value given in
當然,我可以使用此代碼代替,但可能比 array_map 慢
foreach ($orders->result as $item)
$result[$item[0]['order_id']] = $item[0];
編輯:
之前foreach或這樣array_map的輸出
Array
(
[0] => Array
(
[order_id] => 41111909
[shop_id] => 34277
[user_id] => 42363
[status_id] => 4
)
)
foreach像這樣使用輸出后
Array
(
[41111909] => Array
(
[order_id] => 41111909
[shop_id] => 34277
[user_id] => 42363
[status_id] => 4
)
)
如何解決?
uj5u.com熱心網友回復:
最簡單的替代方法是制作一個箭頭函式(單運算式閉包)來為您獲取元素。
如果陣列是普通串列,以便您始終獲得 element 0,那就很簡單:
$orders->result = array_map(fn($item) => $item[0], $orders->result);
這種情況下的另一種選擇是array_column:
$orders->result = array_colum($orders->result, 0);
如果您有其他鍵,則可以在回呼中使用reset或array_key_first:
$orders->result = array_map(fn($item) => $item[array_key_first($item)], $orders->result);
(我懷疑 array_key_first 會稍微高效一些,因為它不需要操作內部陣列指標。)
uj5u.com熱心網友回復:
不完全清楚您要做什么,但似乎您正在嘗試從嵌套陣列中獲取第一個值。您應該能夠使用一個函式:
$orders->result = array_map(function($v) { return reset($v); }, $orders->result);
您也可以嘗試使用current它是否滿足您的需要,因為它不接受參考并且陣列指標應該已經通過以下方式重置array_map:
$orders->result = array_map('current', $orders->result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/324917.html
上一篇:需要幫助拆分數字值php
