首頁  >  文章  >  後端開發  >  淺析幾種轉換不規則物件為陣列的方法

淺析幾種轉換不規則物件為陣列的方法

PHPz
PHPz原創
2023-04-23 10:21:02369瀏覽

在PHP中,我們有時需要將一個物件轉換成數組,方便我們進行資料運算。通常情況下,如果物件的屬性名稱和陣列的鍵值相同,我們可以直接使用物件轉數組的函數,例如:

$array = (array) $obj; // $obj为对象,$array为数组

但是,如果物件屬性名稱存在不規則的情況,例如屬性名稱中帶有底線、連字符或首字母大寫等,這時候我們需要手動處理屬性名,將它們轉換成合法的數組鍵名。下面我們介紹幾種轉換不規則物件為數組的方法。

方法一:使用get_object_vars()函數

get_object_vars()函數可以用來取得物件的所有屬性和屬性值,傳回一個關聯數組。我們可以利用該函數取得物件屬性列表後,再進行處理。

$obj = new stdClass();
$obj->user_name = '张三';
$obj->user_age = 20;
$obj->{'user_city-name'} = '北京';

$arr = array();
$vars = get_object_vars($obj);
foreach($vars as $key => $value){
    $arr[str_replace('_', '-', $key)] = $value;
}

var_export($arr);

在上面的範例中,我們使用get_object_vars()函數取得了物件的所有屬性和屬性值,然後使用foreach循環遍歷,將屬性名稱中的底線轉換為連字符。最終轉換後的陣列如下:

array (
  'user_name' => '张三',
  'user_age' => 20,
  'user-city-name' => '北京',
)

注意,此方法僅對物件的屬性進行處理,不包含繼承的屬性。

方法二:使用json_encode()和json_decode()函數

我們也可以使用json_encode()和json_decode()函數將物件轉換成JSON格式,再利用json_decode()函數將JSON格式轉換回陣列。

$obj = new stdClass();
$obj->user_name = '张三';
$obj->user_age = 20;
$obj->{'user_city-name'} = '北京';

$json_str = json_encode($obj);
$arr = json_decode($json_str, true);

foreach($arr as $key => $value){
    $new_key = str_replace('_', '-', $key);
    unset($arr[$key]);
    $arr[$new_key] = $value;
}

var_export($arr);

在上面的範例中,我們使用json_encode()函數將物件轉換成JSON格式,再利用json_decode()函數將JSON格式轉換回陣列。然後利用foreach循環遍歷數組,將屬性名中的底線轉換為連字符。最終轉換後的陣列與方法一相同。

方法三:使用array_map()函數

array_map()函數可以對陣列中的每個元素套用回呼函數,傳回一個新的陣列。我們可以利用該函數將屬性名稱中的底線轉換為連字符。

$obj = new stdClass();
$obj->user_name = '张三';
$obj->user_age = 20;
$obj->{'user_city-name'} = '北京';

$arr = (array) $obj;
$arr = array_map(function($key){
    return str_replace('_', '-', $key);
}, array_keys($arr));
$arr = array_combine($arr, (array) $obj);

var_export($arr);

在上面的範例中,我們使用array_map函數將屬性名稱中的底線轉換為連字符,利用array_keys()函數取得物件的屬性列表,再利用array_combine()函數將屬性名稱和屬性值轉換成數組。最終轉換後的陣列與方法一、方法二相同。

總結:

當我們需要將一個物件轉換成數組,遇到不規則屬性名稱時,可以使用get_object_vars()、json_encode()、array_map()等函數來處理。透過這些方法,我們可以輕鬆地將不規則物件轉換成規則數組,方便我們進行資料操作。

以上是淺析幾種轉換不規則物件為陣列的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn