PHP 在未知深度的递归函数中追加数组 [0]
PHP Append Array[0] in Recursive Function for Unknown Depth
我有 xml 已经转换成数组。响应数组似乎没有为一个结果创建数组[0],而是为多个结果创建数组[0]、[1]、[2]。所以我想为每个结果响应创建数组[0],以便对我的迭代进行标准化。初始响应数组如下:
数组 - 一个细节
(
[BookedDetail] => Array
(
[BookedDetailID] => 192
[Customer] => Array
(
[CustomerID] => 110
[LanguageID] => 2
[Address] => Array
(
[StreetName] => Northway 23
[PostalCode] => 29843
[Region] => NSW
)
)
[Currency] => Array
(
[CurrencyID] => 19
[CurrencyName] => Yen
[CurrencyShortName] => JPY
)
[Status] => 1
[CreateBy] => 15
)
)
数组 - 许多细节
(
[BookedDetail] => Array
(
[0] => Array
(
[BookedDetailID] => 192
[Customer] => Array
(
[CustomerID] => 110
[LanguageID] => 2
[CustomerType] => 1
[Address] => Array
(
[StreetName] => Northway 23
[PostalCode] => 29843
[Region] => NSW
)
)
[Currency] => Array
(
[CurrencyID] => 19
[CurrencyName] => Yen
[CurrencyShortName] => JPY
)
[Status] => 3
[CreateBy] => 16
)
[1] => Array
(
[BookedDetailID] => 193
[Customer] => Array
(
[CustomerID] => 113
[LanguageID] => 2
[CustomerType] => 1
[Address] => Array
(
[StreetName] => Southway 23
[PostalCode] => 2852
[Region] => SSW
)
)
[Currency] => Array
(
[CurrencyID] => 23
[CurrencyName] => US Dollar
[CurrencyShortName] => USD
)
[Status] => 2
[CreateBy] => 17
)
)
)
我的预期结果:
(
[BookedDetail] => Array
(
[0] => Array
(
[BookedDetailID] => 192
[Customer] => Array
(
[0] => Array
(
[CustomerID] => 110
[LanguageID] => 2
[CustomerType] => 1
[Address] => Array
(
[0] => Array
(
[StreetName] => Northway 23
[PostalCode] => 29843
[Region] => NSW
)
)
)
)
[Currency] => Array
(
[0] = Array
(
[CurrencyID] => 19
[CurrencyName] => Yen
[CurrencyShortName] => JPY
)
)
[Status] => 3
[CreateBy] => 16
)
[1] => Array
(
[BookedDetailID] => 193
[Customer] => Array
(
[0] => Array
(
[CustomerID] => 113
[LanguageID] => 2
[CustomerType] => 1
[Address] => Array
(
[0] => Array
(
[StreetName] => Southway 23
[PostalCode] => 2852
[Region] => SSW
)
)
)
)
[Currency] => Array
(
[0] => Array
(
[CurrencyID] => 23
[CurrencyName] => US Dollar
[CurrencyShortName] => USD
)
)
[Status] => 2
[CreateBy] => 17
)
)
)
每个节点可以有一个或多个子节点,所以我想为每个节点制作[0],为多个子节点制作[0][1][2]等。我尝试了一些代码,但在维护当前数组结果以添加递归函数时遇到问题。我是否需要变量外部函数来存储我当前的数组,或者在调用递归函数时追加它。我当前的代码:
$x1 = json_decode(json_encode($xmlobj), true);
$result = array();
function callarr ($arrin)
{
foreach ($arrin as $arrkey => $arrvalue)
{
foreach ($arrvalue as $subkey => $subvalue)
{
if (is_array($subvalue))
{
$arr1[$arrkey][$subkey] = $subvalue;
// recursive function here
}
else
{
$arr2[$arrkey][0][$subkey] = $subvalue;
}
}
$result = array_merge($arr1, $arr2);
}
return $result;
}
$x2 = callarr ($x1);
print_r ($x2);
$x2 的结果将在 [BookedDetail] 下创建 [0] 个节点,只是因为我还没有调用递归函数。我需要帮助才能获得预期的数组结果。非常感谢您的帮助。
您可以尝试这样的操作,但我怀疑 array_merge 在这种情况下是否可行。您需要创建数组以向其添加多个值。在这一行中,你需要一个数组 $arr1[$arrkey][$subkey][] 来保存多个值
$x1 = json_decode(json_encode($xmlobj), true);
$result = array();
function callarr ($arrin)
{
foreach ($arrin as $arrkey => $arrvalue)
{
foreach ($arrvalue as $subkey => $subvalue)
{
if (is_array($subvalue))
{
$arr1[$arrkey][$subkey][] = $subvalue;
// recursive function here
}
else
{
$arr2[$arrkey][0][$subkey][] = $subvalue;
}
}
$result = array_merge($arr1, $arr2);
}
return $result;
}
$x2 = callarr ($x1);
print_r ($x2);
很难知道这是否正是您所追求的,但您可能比我更容易检查它。
该函数现在是递归的,您可以看到您的评论已被删除的位置,并且正在通过使用 $arrvalue
...
再次调用此函数来替换赋值
function callarr ($arrin)
{
$result = array();
foreach ($arrin as $arrkey => $arrvalue)
{
if (is_array($arrvalue))
{
$result[$arrkey][] = callarr($arrvalue);
}
else
{
$result[$arrkey] = $arrvalue;
}
}
return $result;
}
我有 xml 已经转换成数组。响应数组似乎没有为一个结果创建数组[0],而是为多个结果创建数组[0]、[1]、[2]。所以我想为每个结果响应创建数组[0],以便对我的迭代进行标准化。初始响应数组如下:
数组 - 一个细节
(
[BookedDetail] => Array
(
[BookedDetailID] => 192
[Customer] => Array
(
[CustomerID] => 110
[LanguageID] => 2
[Address] => Array
(
[StreetName] => Northway 23
[PostalCode] => 29843
[Region] => NSW
)
)
[Currency] => Array
(
[CurrencyID] => 19
[CurrencyName] => Yen
[CurrencyShortName] => JPY
)
[Status] => 1
[CreateBy] => 15
)
)
数组 - 许多细节
(
[BookedDetail] => Array
(
[0] => Array
(
[BookedDetailID] => 192
[Customer] => Array
(
[CustomerID] => 110
[LanguageID] => 2
[CustomerType] => 1
[Address] => Array
(
[StreetName] => Northway 23
[PostalCode] => 29843
[Region] => NSW
)
)
[Currency] => Array
(
[CurrencyID] => 19
[CurrencyName] => Yen
[CurrencyShortName] => JPY
)
[Status] => 3
[CreateBy] => 16
)
[1] => Array
(
[BookedDetailID] => 193
[Customer] => Array
(
[CustomerID] => 113
[LanguageID] => 2
[CustomerType] => 1
[Address] => Array
(
[StreetName] => Southway 23
[PostalCode] => 2852
[Region] => SSW
)
)
[Currency] => Array
(
[CurrencyID] => 23
[CurrencyName] => US Dollar
[CurrencyShortName] => USD
)
[Status] => 2
[CreateBy] => 17
)
)
)
我的预期结果:
(
[BookedDetail] => Array
(
[0] => Array
(
[BookedDetailID] => 192
[Customer] => Array
(
[0] => Array
(
[CustomerID] => 110
[LanguageID] => 2
[CustomerType] => 1
[Address] => Array
(
[0] => Array
(
[StreetName] => Northway 23
[PostalCode] => 29843
[Region] => NSW
)
)
)
)
[Currency] => Array
(
[0] = Array
(
[CurrencyID] => 19
[CurrencyName] => Yen
[CurrencyShortName] => JPY
)
)
[Status] => 3
[CreateBy] => 16
)
[1] => Array
(
[BookedDetailID] => 193
[Customer] => Array
(
[0] => Array
(
[CustomerID] => 113
[LanguageID] => 2
[CustomerType] => 1
[Address] => Array
(
[0] => Array
(
[StreetName] => Southway 23
[PostalCode] => 2852
[Region] => SSW
)
)
)
)
[Currency] => Array
(
[0] => Array
(
[CurrencyID] => 23
[CurrencyName] => US Dollar
[CurrencyShortName] => USD
)
)
[Status] => 2
[CreateBy] => 17
)
)
)
每个节点可以有一个或多个子节点,所以我想为每个节点制作[0],为多个子节点制作[0][1][2]等。我尝试了一些代码,但在维护当前数组结果以添加递归函数时遇到问题。我是否需要变量外部函数来存储我当前的数组,或者在调用递归函数时追加它。我当前的代码:
$x1 = json_decode(json_encode($xmlobj), true);
$result = array();
function callarr ($arrin)
{
foreach ($arrin as $arrkey => $arrvalue)
{
foreach ($arrvalue as $subkey => $subvalue)
{
if (is_array($subvalue))
{
$arr1[$arrkey][$subkey] = $subvalue;
// recursive function here
}
else
{
$arr2[$arrkey][0][$subkey] = $subvalue;
}
}
$result = array_merge($arr1, $arr2);
}
return $result;
}
$x2 = callarr ($x1);
print_r ($x2);
$x2 的结果将在 [BookedDetail] 下创建 [0] 个节点,只是因为我还没有调用递归函数。我需要帮助才能获得预期的数组结果。非常感谢您的帮助。
您可以尝试这样的操作,但我怀疑 array_merge 在这种情况下是否可行。您需要创建数组以向其添加多个值。在这一行中,你需要一个数组 $arr1[$arrkey][$subkey][] 来保存多个值
$x1 = json_decode(json_encode($xmlobj), true);
$result = array();
function callarr ($arrin)
{
foreach ($arrin as $arrkey => $arrvalue)
{
foreach ($arrvalue as $subkey => $subvalue)
{
if (is_array($subvalue))
{
$arr1[$arrkey][$subkey][] = $subvalue;
// recursive function here
}
else
{
$arr2[$arrkey][0][$subkey][] = $subvalue;
}
}
$result = array_merge($arr1, $arr2);
}
return $result;
}
$x2 = callarr ($x1);
print_r ($x2);
很难知道这是否正是您所追求的,但您可能比我更容易检查它。
该函数现在是递归的,您可以看到您的评论已被删除的位置,并且正在通过使用 $arrvalue
...
function callarr ($arrin)
{
$result = array();
foreach ($arrin as $arrkey => $arrvalue)
{
if (is_array($arrvalue))
{
$result[$arrkey][] = callarr($arrvalue);
}
else
{
$result[$arrkey] = $arrvalue;
}
}
return $result;
}