重构多维数组格式

时间:2017-11-21 13:39:03

标签: php arrays

我正在努力应对看似非常直接的任务。我已经看过并尝试了各种各样的功能和建议,希望可能有一些简单而实用的功能。我没有尝试过,这让我有了进行重组的逻辑。

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

$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
 ) 

我在过去的几个小时里尝试过所有的东西,一个简单的解决方案完全避开了我。

4 个答案:

答案 0 :(得分:1)

以下代码转换预期结果中的原始数组:

        train_accuracy = accuracy.eval(feed_dict={
            x: batch[0], y_: batch[1], keep_prob: 1.0, isTraining: False})

请在此处查看:https://eval.in/904473

当然,它假定数据的内容很多,但它应该适用于任意数量的项目。

如果您需要另一个变量中的属性,只需使用$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]; } } 访问它。

答案 1 :(得分:1)

如果您可以像上面的评论中所说的那样加入三个数组,则此代码将生成您想要的外观 我使用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);

https://3v4l.org/EilvE

答案 2 :(得分:1)

        Run this code you will get smiler result as you want :
           $twodimantion=array();
$properties=array('property1','property2','property3');
$charges=array('ISP2','ISP3','ISP4');
$names=array('NAME-A','NAME-B','NAME-C');
foreach ($properties as $key => $property) {
       $twodimantion['charge'][$key]=$charges[$key];
       $twodimantion['names'][$key]=$names[$key];
       $twoarray[$property]=$twodimantion;
}
echo '<pre>';
print_r($twoarray);
echo '</pre>';

答案 3 :(得分:0)

我不能说我完全遵循你想要做的事情,但我认为这可能是你的方式的一部分。

尝试在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;
}