如何基于键合并嵌套数组?

问题描述 投票:0回答:3

PHP array

我有如上图所示的数组,我试图基于键合并所有嵌套数组,所以例如现在有5个数组与键34.我想要一个34键和5个值的数组。我怎样才能做到这一点?这是我的代码。

    $proba = array();
while($row = $result->fetch(PDO::FETCH_ASSOC)){
    extract($row);
    if(!in_array($id, array_column($posts_arr['lokacije'], 'id'))) {
        $post_item = array(
            'id' => $id,
            'name' => $name,
            'state' => $state,
            'address' => $address,
            'phone' => $phone,
            'working_hours' => $working_hours,
            'description' => $description,
            'email' => $email,
            'fb_page' => $fb_page,
            'website' => $website,
            'additional_info' => $additional_info,
            'lat' => $lat,
            'lng' => $lng
        );
    array_push($posts_arr['lokacije'], $post_item);
    };

    array_push($proba, array($id => $naziv));
    $test = array_merge_recursive($proba, array($id => $naziv));
}
print_r($test);
php arrays array-merge
3个回答
1
投票
$proba = array();
while($row = $result->fetch(PDO::FETCH_ASSOC)){
    extract($row);

    //....

    if (empty($proba[$id])) {
        $proba[$id] = array();
    }
     $proba[$id][] = $naziv;
}

另外我不明白你为什么使用extract - 我想,$post_item$row相同。


1
投票

我创建了一个与你的一样的演示,这里是代码:

$arr = [
    [2 => 'A'],
    [34 => 'B'],
    [34 => 'C'],
    [34 => 'D'],
    [34 => 'E'],
    [34 => 'F'],
    [20 => 'G'],
];

$result = [];

foreach($arr as $a) {
    foreach($a as $key => $value) {
        array_key_exists($key, $result) ?
            $result[$key][] = $value:
            $result[$key] = [$value];
    }
}

结果是:

array(3) {
  [2]=>
  array(1) {
    [0]=>
    string(1) "A"
  }
  [34]=>
  array(5) {
    [0]=>
    string(1) "B"
    [1]=>
    string(1) "C"
    [2]=>
    string(1) "D"
    [3]=>
    string(1) "E"
    [4]=>
    string(1) "F"
  }
  [20]=>
  array(1) {
    [0]=>
    string(1) "G"
  }
}

0
投票

我理解你想要做的简单回答:

foreach($input as $nr=>$data) {
    foreach($data as $key=>$val) {
        $output[$key][$nr] = $val;
    }
}

这将简单地翻转层次结构级别。如果您只想收集值,这是一种方法。它保留了原始数组索引,但不是“[$ nr]”,你只需说“[]”就可以使它成为一个简单的顺序数组。

如果您将阵列显示为文本而不是那里的大图像,我将向您显示结果。

© www.soinside.com 2019 - 2024. All rights reserved.