问题描述
我正在围绕将数组存储在API中的理论场景构建算法,这意味着不允许我对其进行编辑,并且我正尝试从该数组中获取数据并将其转换为关联数组。爆炸和爆炸功能。我已经取得了不错的进展,到目前为止,这是我的代码……
<?PHP
$arr = array(
"action: Added; quantity: 1; item_code: RNA1; product_name: Mens Organic T-shirt; colour: White; size: XL","action: Subtracted; quantity: 7; item_code: RNC1; product_name: Kids Basic T-shirt; colour: Denim Blue; size: 3-4y","action: Added; quantity: 20; item_code: RNV1; product_name: Gift Voucher; style: Mens; value: £20",);
// Split the array into strings.
$imploded1 = implode("; ",$arr);
//echo $imploded;
// Seperate the strings by the ";" character.
$exploded1 = explode("; ",$imploded1);
// This gives me the keys and pairs in the same index.
$imploded2 = implode("\n",$exploded1);
// print_r($formatimploded);
$result = array_column(array_map(function($v) {
return explode(":",$v);
},explode(" ",$imploded2)),1,0);
print_r($result);
该程序几乎可以运行。我遇到的问题是没有将键的值添加到数组中,而且我不确定为什么这样做。这是输出:
Array
(
[action] =>
[quantity] =>
[item_code] =>
[product_name] =>
[colour] =>
[size] =>
[style] =>
[value] =>
)
有人可以向我解释吗?非常感谢您的帮助。
解决方法
<?php
$arr = array(
"action: Added; quantity: 1; item_code: RNA1; product_name: Mens Organic T-shirt; colour: White; size: XL","action: Subtracted; quantity: 7; item_code: RNC1; product_name: Kids Basic T-shirt; colour: Denim Blue; size: 3-4y","action: Added; quantity: 20; item_code: RNV1; product_name: Gift Voucher; style: Mens; value: £20",);
//create new array to hold new values
$new_arr = [];
//loop through strings
foreach($arr as $v) {
//break strings into "chunks" (e.g "action: Added","quantity: 1",etc)
$chunks = explode('; ',$v);
//create temporary array inside "string loop"
$tmp = [];
//loop through each chunk
foreach($chunks as $chunk) {
//split chunks into key => values (e.g "action","added")
$key_value = explode(': ',$chunk);
//add split chunk to `$tmp` array,using `[0]` as key and `[1]` as value
$tmp[$key_value[0]] = $key_value[1];
}
//after "chunk loop",add `$tmp` to `$new_arr`
$new_arr[] = $tmp;
}
print_r($new_arr);
输出:
Array
(
[0] => Array
(
[action] => Added
[quantity] => 1
[item_code] => RNA1
[product_name] => Mens Organic T-shirt
[colour] => White
[size] => XL
)
[1] => Array
(
[action] => Subtracted
[quantity] => 7
[item_code] => RNC1
[product_name] => Kids Basic T-shirt
[colour] => Denim Blue
[size] => 3-4y
)
[2] => Array
(
[action] => Added
[quantity] => 20
[item_code] => RNV1
[product_name] => Gift Voucher
[style] => Mens
[value] => £20
)
)
,
如果首先要负责实际存储这些数据的方式,那么最好以一种更加标准化的格式(例如JSON)进行存储。您的数据将更容易使用。
这是将其中一项存储为JSON的方式。请注意,这只是对当前使用的分号和非引号值的微小更改。
$json = '{"action": "Added","quantity": "1","item_code": "RNA1","product_name": "Mens Organic T-shirt","colour": "White","size": "XL"}';
然后在PHP中,您可以简单地使用json_decode()将其转换为对象:
$item = json_decode($json);
您可以像这样轻松地访问属性:
$item->quantity
$item->colour
$item->size
如果出于某种原因,您确实想要数组,则可以改为:
$item = json_decode($json,true);
哪个给:
Array
(
[action] => Added
[quantity] => 1
[item_code] => RNA1
[product_name] => Mens Organic T-shirt
[colour] => White
[size] => XL
)