Php 重构多维数组格式

Php 重构多维数组格式,php,arrays,Php,Arrays,我正在努力完成一项看起来相当直截了当的任务。我已经看过并尝试了各种各样的功能和建议,希望有一些简单实用的东西。我尝试过的一切都没有给我进行重组的逻辑 我有一个长的复杂数组。然而,我试图解决的逻辑问题非常简单,一般如下所示: $cost_type = Array ( 0 => "ISP2", 1 => "ISP3", 2 => "ISP4" ); $supplier_name = Array ( 0 => "NAME-A", 1 =

我正在努力完成一项看起来相当直截了当的任务。我已经看过并尝试了各种各样的功能和建议,希望有一些简单实用的东西。我尝试过的一切都没有给我进行重组的逻辑

我有一个长的复杂数组。然而,我试图解决的逻辑问题非常简单,一般如下所示:

$cost_type = Array
(
    0 => "ISP2",
    1 => "ISP3",
    2 => "ISP4"
);
$supplier_name  = Array
(
    0 => "NAME-A",
    1 => "NAME-B",
    2 => "NAME-C"
 );
$propertyid = Array
(
    0 => "property1",
    1 => "property2",
    2 => "property2"
);
我需要将其转换为以下数组集(注意两个数组与公共属性id的连接

 $property1
 (
    array['charges']  
            [0] =>IPS2

   array ['names']
            [0] =>NAME-A
 )

 $property2
 (
   array['charges'] 
           [0] ->IPS3
           [1] =>IPS4

   array['names']
         [0] =>NAME-B
         [1] =>NAME-c
 ) 

在过去的几个小时里,我已经尝试了所有的方法,但一个简单的解决方案完全没有让我明白。

我不能说我完全明白你的意图,但我认为这可能是你实现目标的一部分

在PHP中尝试重新构造数据时,首先创建一个空数组(或其他数据结构)来存储新数据通常很有帮助。然后,您可以找到一种方法来循环初始数据结构,使您能够按正确的顺序将项插入重新格式化的结构中

<?php
$properties = []; // Array to hold final result

// Loop over your initial inputs
foreach ($groupsOfValues as $groupName => $groupValues) {
    $temp = [];  // Array to hold each groupings reformatted data

    // Loop over the items in one of the inputs
    for ($i=0; $i<count($group) && $i<count($properties)+1; $i++) {
        if (!is_array($temp[$groupName])) {
             $temp[$groupName] = [];
        }
        $temp[$groupName][] = $group[$i];
    }

    $properties[] = $temp;
}

我不能说我完全遵循了您的意图,但我认为这可能是您实现目标的一部分

在PHP中尝试重新构造数据时,首先创建一个空数组(或其他数据结构)来存储新数据通常很有帮助。然后,您可以找到一种方法来循环初始数据结构,使您能够按正确的顺序将项插入重新格式化的结构中

<?php
$properties = []; // Array to hold final result

// Loop over your initial inputs
foreach ($groupsOfValues as $groupName => $groupValues) {
    $temp = [];  // Array to hold each groupings reformatted data

    // Loop over the items in one of the inputs
    for ($i=0; $i<count($group) && $i<count($properties)+1; $i++) {
        if (!is_array($temp[$groupName])) {
             $temp[$groupName] = [];
        }
        $temp[$groupName][] = $group[$i];
    }

    $properties[] = $temp;
}

以下代码将原始数组转换为预期结果:

$res = array();
foreach($arr[2] as $k => $foo){ // foreach property
    if(!isset($res[$foo])){ // add property if not yet in list
        $res[$foo] = array(
            'charges' => array($arr[0][$k]),
            'names' => array($arr[1][$k])
        );
    }else{ // add new value to already existing property
        $res[$foo]['charges'][] = $arr[0][$k];
        $res[$foo]['names'][] = $arr[1][$k];
    }
}
在这里查看:

当然,它假设了一系列关于数据的事情,但它应该适用于任何数量的项目


如果您需要另一个变量中的属性,只需使用
$res['name of it]

访问它。以下代码将原始数组转换为预期结果:

$res = array();
foreach($arr[2] as $k => $foo){ // foreach property
    if(!isset($res[$foo])){ // add property if not yet in list
        $res[$foo] = array(
            'charges' => array($arr[0][$k]),
            'names' => array($arr[1][$k])
        );
    }else{ // add new value to already existing property
        $res[$foo]['charges'][] = $arr[0][$k];
        $res[$foo]['names'][] = $arr[1][$k];
    }
}
在这里查看:

当然,它假设了一系列关于数据的事情,但它应该适用于任何数量的项目


如果您需要另一个变量中的属性,只需使用
$res['name of it]

访问它,如果您可以像上面的注释中所说的那样加入三个数组,则此代码将生成您想要的外观。
我使用property循环遍历数组,并将key作为键来查找其他子数组中的名称和电荷

$cost_type = Array
(
    0 => "ISP2",
    1 => "ISP3",
    2 => "ISP4"
);
$supplier_name  =Array
(
    0 => "NAME-A",
    1 => "NAME-B",
    2 => "NAME-C"
 );
$propertyid = Array
(
    0 => "property1",
    1 => "property2",
    2 => "property2"
);
$arr[] = $cost_type;
$arr[] = $supplier_name;
$arr[] = $propertyid;

$result = array();
Foreach($arr[2] as $key => $prop){
    $result[$prop]["charges"][] =$arr[0][$key];
    $result[$prop]["names"][] = $arr[1][$key];
}

Var_dump($result);

如果你能像你在上面的评论中所说的那样加入这三个数组,那么这段代码将生成你想要的外观。
我使用property循环遍历数组,并将key作为键来查找其他子数组中的名称和电荷

$cost_type = Array
(
    0 => "ISP2",
    1 => "ISP3",
    2 => "ISP4"
);
$supplier_name  =Array
(
    0 => "NAME-A",
    1 => "NAME-B",
    2 => "NAME-C"
 );
$propertyid = Array
(
    0 => "property1",
    1 => "property2",
    2 => "property2"
);
$arr[] = $cost_type;
$arr[] = $supplier_name;
$arr[] = $propertyid;

$result = array();
Foreach($arr[2] as $key => $prop){
    $result[$prop]["charges"][] =$arr[0][$key];
    $result[$prop]["names"][] = $arr[1][$key];
}

Var_dump($result);

运行此代码,您将获得您想要的更高的结果:
$twodimantion=array();
$properties=array('property1','property2','property3');
$charges=array('ISP2'、'ISP3'、'ISP4');
$names=array('NAME-A'、'NAME-B'、'NAME-C');
foreach($properties作为$key=>$property){
$twodimantion['charge'][$key]=$charges[$key];
$twodimantion['names'][$key]=$names[$key];
$twoarray[$property]=$TwoDiManion;
}
回声';
打印(两个数组);
回声';
运行此代码,您将获得所需的更高的结果:
$twodimantion=array();
$properties=array('property1','property2','property3');
$charges=array('ISP2'、'ISP3'、'ISP4');
$names=array('NAME-A'、'NAME-B'、'NAME-C');
foreach($properties作为$key=>$property){
$twodimantion['charge'][$key]=$charges[$key];
$twodimantion['names'][$key]=$names[$key];
$twoarray[$property]=$TwoDiManion;
}
回声';
打印(两个数组);
回声';

那么您正试图按属性权限对所有这些数组进行分组?是的,先生,这些值都来自一组表单选择框,因此数组是由表单自动生成的,如问题的第一部分所示。但随后需要使用propertyid筛选器将其加载到数据库中(因此需要转换)我可以想出一些解决问题的方法,我认为你正在试图解决,但我并不知道问题的全部范围或基于你的原始帖子的解决方案。问题确实解决了所示的示例。原始问题只是更大(更多数据)这些都是DJ。所以如果你有任何想法,我会非常感激have@FirstOne是的,有数千个可能的属性。但是,如上所述的数组结构从未更改。因此,您正在尝试按属性权限对所有这些数组进行分组?是的,先生,这些值都来自一组表单选择框,因此数组是自动的由问题第一部分中所示的表单生成。但是它们需要使用propertyid筛选器加载到数据库(因此需要转换)我可以想出一些解决问题的方法,我认为你正在试图解决,但我并不知道问题的全部范围或基于你的原始帖子的解决方案。问题确实解决了所示的示例。原始问题只是更大(更多数据)这些都是DJ。所以如果你有任何想法,我会非常感激have@FirstOne是的,有数千个可能的属性。但是上述数组的结构从未更改。意外的
{
在…中,您错过了一个
在这种情况下。老实说,很难将这一点与问题联系起来。原则是标准的。解决方案,,,现在无法真正看到它是如何应用的。再多解释一点确实会有帮助。
{
在……中,您错过了一个
的条件。老实说,很难将此与问题联系起来。原则是标准的。解决方案,,,现在无法真正看到它是如何应用的。多做一点解释真的会有帮助。谢谢。尽管这是一个建议,但还有一些其他建议值得改进似乎是最直截了当的。如果你愿意,你可以跳过合并数组的部分。在我在评论中得到你的答案之前,我写了这个答案,所以我只是编辑了我的答案