【问题标题】:PHP parse array to get index wise resultPHP解析数组以获取索引结果
【发布时间】:2021-03-08 15:12:21
【问题描述】:

我有一个这样的数组

array:9 [
  "_token" => "A5lA2YRgSS4n7uqcUYHe1NUZVk4Qbg8vTm7hyVLn"
  "date" => array:3 [
    0 => "1982-02-10"
    1 => "2017-07-14"
    2 => "1985-02-14"
    ...
  ]
  "time" => array:3 [
    0 => "09:55"
    1 => "19:22"
    2 => "17:23"
    ...
  ]
  "departure_city" => array:3 [
    0 => "Et aut ullamco non a"
    1 => "Sed beatae eveniet"
    2 => "Autem aut quis nostr"
    ...
  ]
  "departure_state" => array:3 [
    0 => "AK"
    1 => "NY"
    2 => "WY"
    ...
  ]
  "arrival_city" => array:3 [
    0 => "Reprehenderit accus"
    1 => "Adipisicing doloremq"
    2 => "Qui deleniti similiq"
    ...
  ]
  "arrival_state" => array:3 [
    0 => "AR"
    1 => "HI"
    2 => "ND"
    ...
  ]
  "vehicle_type" => array:3 [
    0 => "1"
    1 => "7"
    2 => "2"
    ...
  ]
  "number_of_passengers" => array:3 [
    0 => "3"
    1 => "8"
    2 => "2"
    ...
  ]
]

如何遍历这个数组并将其转换为类似下面的数组

array:3 [
  0 => array:7 [
    date => 1982-02-10,
    time => 09:55,
    departure_city => Et aut ullamco non a,
    departure_satte => AK,
    arrival_city => Reprehenderit accus
    arrival_satate => AR
    vehicle_type => 1,
    number_of_passenger => 3
  ],
  1 => array:7 [
    date => 2017-07-14,
    time => 19:22,
    departure_city => Sed beatae eveniet,
    departure_satte => NY,
    arrival_city => Adipisicing doloremq
    arrival_satate => HI
    vehicle_type => 7,
    number_of_passenger => 8
  ]
...
]

【问题讨论】:

  • 你只是在所有子数组中挑选第一项吗?
  • @AlexBarker,是的,这可以解决问题
  • 你目前的代码是?

标签: php arrays laravel


【解决方案1】:

只需使用 foreach,它会创建数组的副本,以便您可以在循环内进行修改。

foreach ($a as $key => $value) {
    if (is_array($value)) {
        $a[$key] = array_shift($value);
    } else {
        $a[$key] = $value;
    }
}

根据您更新的问题更新解决方案。这只会产生一个包含 3 个元素的数组,而不是 9 个,但我这就是你想要的。

$b = array();
foreach ($a as $aKey => $aValue) {
    if (is_array($aValue)) {
        foreach ($aValue as $bKey => $bValue) {
            $b[$bKey][$aKey] = $bValue;
        }
    }
}

var_dump($b);

【讨论】:

  • 这仅在我需要 1 个子数组时才有效,从我的问题中的示例输入中,我正在寻找 3 个子数组
  • 你在说什么?我在您的样本中只看到一个子数组,我问您是否只想要您确认的第一个项目......您需要使用有关您想要的更多信息来更新您的问题。你是否试图渗透结果,如果是,在什么条件下?
  • @baig772 我已经根据您的要求更新了答案。
  • 谢谢。这正是我一直在寻找的
【解决方案2】:

你可以利用相对不为人知的array_column函数做一些事情:

// Cleanup any keys that don't represent record data
unset($x['_token']);
$keys = array_keys($x);
$values = array_values($x);
$merged = [];

$record_cnt = count($x['date']);
for ($i = 0; $i < $record_cnt; $i++) {
  $merged[] = array_combine($keys, array_column($values, $i));
}

print_r($merged);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    相关资源
    最近更新 更多