PHP数组操作需要技巧

PHP数组操作需要技巧,php,arrays,Php,Arrays,我一次提交了阵列,请参见以下详细信息: array(5) { ["ambition_id"]=> array(2) { [55]=> string(2) "55" [60]=> string(2) "60" } ["target"]=> array(1) { [0]=> string(8) "target 1" [1]=> string(8) "

我一次提交了阵列,请参见以下详细信息:

array(5) {
  ["ambition_id"]=>
      array(2) {
        [55]=> string(2) "55"
        [60]=> string(2) "60"
      }
      ["target"]=>
      array(1) {
        [0]=> string(8) "target 1"
        [1]=> string(8) "target 2"
      }
      ["strides"]=>
      array(1) {
        [0]=> string(1) "1"
        [1]=> string(1) "1"
      }
      ["date"]=>
      array(1) {
        [0]=> string(10) "2017-02-08"
        [1]=> string(10) "2017-03-08"
      }
      ["frequency"]=>
      array(1) {
        [0]=> string(1) "1"
        [1]=> string(1) "2"
      }
}
实际上,我在mysql中有两个表,“野心”和“目标”。野心是一组目标(“野心id”是“目标”表中的外键)。该数组将存储在“target”表中。这就是为什么会有“雄心壮志”的原因

我尝试过很多次,但都失败了(使用foreach),现在我需要有人能给我帮助

用蛮力,这很容易!我已经解决了它,但我需要“更高级”的数组操作

我怎么会这样呢

array(2) {
   [0] => array('ambition_id' => 55, 
                'target' => 'target 1', 
                'strides' => 1, 
                'date' => '2017-02-08', 
                'frequency' => 1
                ),
    [1] => array('ambition_id' => 60, 
                'target' => 'target 2', 
                'strides' => 2, 
                'date' => '2017-03-08', 
                'frequency' => 2)
}

请帮忙,谢谢

您必须以数据为中心:

$data = array (
    "ambition_id" =>
        array (
        55 =>  "55",
        60 =>  "60"
    ),
    "target" =>
    array (
        0 =>  "target 1",
        1 =>  "target 2"
    ),
    "strides" =>
    array (
        0 =>  "1",
        1 =>  "1"
    ),
    "date" =>
    array (
        0 =>  "2017-02-08",
        1 =>  "2017-03-08"
    ),
    "frequency" =>
    array (
        0 =>  "1",
        1 =>  "2"
    )
);

// pivot data
$pivot = array();
foreach ($data as $datum => $values) {
    $value_index = 0;
    foreach ($values as $value) {
        $pivot[$value_index][$datum] = $value;
        $value_index++;
    }
}

print_r($pivot);

这假设您只有两个级别的数据,并且数据表现良好。

您必须调整数据:

$data = array (
    "ambition_id" =>
        array (
        55 =>  "55",
        60 =>  "60"
    ),
    "target" =>
    array (
        0 =>  "target 1",
        1 =>  "target 2"
    ),
    "strides" =>
    array (
        0 =>  "1",
        1 =>  "1"
    ),
    "date" =>
    array (
        0 =>  "2017-02-08",
        1 =>  "2017-03-08"
    ),
    "frequency" =>
    array (
        0 =>  "1",
        1 =>  "2"
    )
);

// pivot data
$pivot = array();
foreach ($data as $datum => $values) {
    $value_index = 0;
    foreach ($values as $value) {
        $pivot[$value_index][$datum] = $value;
        $value_index++;
    }
}

print_r($pivot);

这假设您只有两个级别的数据,并且数据表现良好。

不是最佳答案,但它解决了您的问题

<?php
$array = [
    "ambition_id" =>
    [
        55 => "55",
        60 => "60"
    ],
    "target" =>
    [
        0 => "target 1",
        1 => "target 2"
    ],
    "strides" =>
    [
        0 => "1",
        1 => "1"
    ],
    "date" =>
    [
        0 => "2017-02-08",
        1 => "2017-03-08"
    ],
    "frequency" =>
    [
        0 => "1",
        1 => "2"
    ],
];
$result = array();
foreach ($array as $k => $v) {
    foreach ($v as $kk => $vv) {
        if ($k == "ambition_id") {
            $result[] = array($k => $vv);
        } else {
            $result[$kk][$k] = $vv;
        }
    }
}

不是最好的答案,但它解决了您的问题

<?php
$array = [
    "ambition_id" =>
    [
        55 => "55",
        60 => "60"
    ],
    "target" =>
    [
        0 => "target 1",
        1 => "target 2"
    ],
    "strides" =>
    [
        0 => "1",
        1 => "1"
    ],
    "date" =>
    [
        0 => "2017-02-08",
        1 => "2017-03-08"
    ],
    "frequency" =>
    [
        0 => "1",
        1 => "2"
    ],
];
$result = array();
foreach ($array as $k => $v) {
    foreach ($v as $kk => $vv) {
        if ($k == "ambition_id") {
            $result[] = array($k => $vv);
        } else {
            $result[$kk][$k] = $vv;
        }
    }
}

只需使用循环数组和用户
array\u值
重新索引内部数组中的循环,并将其存储到新数组中,如下所示

   <?php

    $new_array =array();

    foreach($array as $key1=>$row1 )
    {
       $ss =array_values($row1);
       foreach($ss as $key2=>$row2)
       {

           $new_array[$key2][$key1]=$row2;

       }

    }

    echo "<pre>";
    print_r($new_array);

    ?>

只需使用循环数组和用户
数组_值
将循环重新索引到内部数组中,并将其存储到新数组中,如下所示

   <?php

    $new_array =array();

    foreach($array as $key1=>$row1 )
    {
       $ss =array_values($row1);
       foreach($ss as $key2=>$row2)
       {

           $new_array[$key2][$key1]=$row2;

       }

    }

    echo "<pre>";
    print_r($new_array);

    ?>

$final_array=array(array_column($array,0),array_column($array,1))@a第一个子数组没有
0
1
索引。需要先转换它。@SougataBose yesI会回去看看你是如何创建数组的,并让处理过程生成一个你想要的数组,而不是摆弄这个数组。如果你让你的问题可读,他们也会读它。如果没有,他们就继续前进$final_array=array(array_列($array,0),array_列($array,1))@a第一个子数组没有
0
1
索引。需要先转换它。@SougataBose yesI会回去看看你是如何创建数组的,并让处理过程生成一个你想要的数组,而不是摆弄这个数组。如果你让你的问题可读,他们也会读它。如果没有,他们就继续前进!