Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何基于键合并嵌套数组?_Php_Arrays_Array Merge - Fatal编程技术网

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

Php 如何基于键合并嵌套数组?,php,arrays,array-merge,Php,Arrays,Array Merge,我有一个如上图所示的数组,我正在尝试根据键合并所有嵌套数组,例如现在有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'))) {

我有一个如上图所示的数组,我正在尝试根据键合并所有嵌套数组,例如现在有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);

对于我所理解的您正在尝试做的事情,简单的答案是:

foreach($input as $nr=>$data) {
    foreach($data as $key=>$val) {
        $output[$key][$nr] = $val;
    }
}
这将简单地翻转层次结构级别。如果您只想收集值,这是一种方法。它保留了原始数组索引,但您可以只说“[]”而不是“[$nr]”,使其成为一个简单的顺序数组


如果您将数组显示为文本而不是大图像,我将向您显示结果。

我理解您试图执行的操作的简单答案:

foreach($input as $nr=>$data) {
    foreach($data as $key=>$val) {
        $output[$key][$nr] = $val;
    }
}
这将简单地翻转层次结构级别。如果您只想收集值,这是一种方法。它保留了原始数组索引,但您可以只说“[]”而不是“[$nr]”,使其成为一个简单的顺序数组

如果将数组显示为文本而不是大图像,我将显示结果

另外,我不明白为什么要使用
提取
——我想,
$post\u item
$row
相同


另外,我不明白您为什么要使用
提取
-我想,
$post\u项
$row
相同,我创建了一个与您一样的演示,下面是代码:

$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"
  }
}

我创建了一个与您一样的演示,下面是代码:

$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"
  }
}

因此,迭代数组并计算键/值。您的问题写得不好。请不要张贴样本数据的屏幕截图。请通过复制粘贴
var\u export($your array)
的输出来发布示例输入。您也没有在问题中澄清确切的预期结果(可能有几种不同的方法来构造合并的数据)。你的问题是否得到解决并不重要,重要的是发布100%清晰的问题,因为未来的研究人员将访问此页面,并想知道他们的问题是否与你的问题相同。因此,迭代你的数组并计算键/值。你的问题写得不好。请不要张贴样本数据的屏幕截图。请通过复制粘贴
var\u export($your array)
的输出来发布示例输入。您也没有在问题中澄清确切的预期结果(可能有几种不同的方法来构造合并的数据)。你的问题是否得到解决并不重要,重要的是发布100%清晰的问题,因为未来的研究人员将访问此页面,并想知道他们的问题是否与你的问题相同。