Php 多维数组,移动到简单数组中

Php 多维数组,移动到简单数组中,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个像这样的数组 [0] => Array ( [youtube_showreel_url_1] => youtube1.com [youtube_showreel_description] => youtube1.com - desc ) [1] => Array ( [youtube_showreel_url_2] => youtube2.com [youtube_sh

我有一个像这样的数组

[0] => Array
    (
        [youtube_showreel_url_1] => youtube1.com
        [youtube_showreel_description] => youtube1.com - desc
    )

[1] => Array
    (
        [youtube_showreel_url_2] => youtube2.com
        [youtube_showreel_description] => youtub2.com - desc
    )

[2] => Array
    (
        [youtube_showreel_url_3] => youtube3.com
        [youtube_showreel_description] => youtube3.com - desc
    )

[3] => Array
    (
        [youtube_showreel_url_4] => youtube4.com
        [youtube_showreel_description] => youtube4.com - desc
    )

[4] => Array
    (
        [youtube_showreel_url_5] => youtube5.com
        [youtube_showreel_description] => youtube5.com - desc
    )
有没有可能用PHP把它变成这样的东西

[0] => Array ( 
        [youtube_showreel_url_1] => youtube1.com  
        [youtube_showreel_description] => youtube1.com - desc 
        [youtube_showreel_url_2] => youtube2.com
        [youtube_showreel_description] => youtub2.com - desc
        [youtube_showreel_url_3] => youtube3.com
        [youtube_showreel_description] => youtube3.com - desc
        [youtube_showreel_url_4] => youtube4.com
        [youtube_showreel_description] => youtube4.com - desc
        [youtube_showreel_url_5] => youtube5.com
        [youtube_showreel_description] => youtube5.com - desc
    )
可以将其分解或通过循环或其他方式运行?


<?php

$aNonFlat = array(
    1,
    2,
    array(
        3,
        4,
        5,
        array(
            6,
            7
        ),
        8,
        9,
    ),
    10,
    11
);

$objTmp = (object) array('aFlat' => array());

array_walk_recursive($aNonFlat, create_function('&$v, $k, &$t', '$t->aFlat[] = $v;'), $objTmp);

var_dump($objTmp->aFlat);

/*
array(11) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
  [5]=>
  int(6)
  [6]=>
  int(7)
  [7]=>
  int(8)
  [8]=>
  int(9)
  [9]=>
  int(10)
  [10]=>
  int(11)
}
*/

?>

来源:

假设原始数据保存在名为
$input
的变量中:

// This will hold the result
$result = array();

foreach ($input as $index => $item) { // Loop outer array
  foreach ($item as $key => $val) { // Loop inner items
    $result[$key] = $val; // Create entry in $result
  }
}

// Show the result
print_r($result);
但是,您的输入中多次出现相同的键,后面的值将覆盖第一个键。因此,您可能希望执行以下操作:

foreach ($input as $index => $item) { // Loop outer array
  foreach ($item as $key => $val) { // Loop inner items
    $result[$key.$index] = $val; // Create entry in $result
  }
}

数组键必须具有唯一的名称,这意味着您将无法拥有多个
youtube\u showreel\u description
键,否则您将覆盖该值。您可以将密钥重命名为类似于
youtube\u showreel\u description\u NN
的名称,其中NN是描述的编号,与您获取url的方式类似。

在“youtube\u showreel\u description”上可能会发生冲突

您应该为此考虑更好的数据结构

我建议您保留其多维数组结构

Array
(
    [0] => Array
        (
                [url] => youtube1.com
                [description] => youtube1.com - desc
        )
    [1] => Array
        (
                [url] => youtube2.com
                [description] => youtube2.com - desc
        )
    [2] => Array
        (
                [url] => youtube3.com
                [description] => youtube3.com - desc
        )
    [3] => Array
        (
                [url] => youtube1.com
                [description] => youtube3.com - desc
        )
    [4] => Array
        (
                [url] => youtube1.com
                [description] => youtube4.com - desc
        )
)

如果您喜欢这种方式,我认为它更干净、更容易解析。不完全是这样,
[youtube\u showreel\u description]
会在每次声明后覆盖自身,您需要为每个密钥使用唯一的标识符。如果键不重要,您可以使用foreach循环在现有数组中循环,并设置一个常规的迭代键,“知道”数组以集合的形式出现,其中第一个元素是url,第二个元素是描述


编辑:如果键不重要,您可以使用url作为键,使用描述作为值,这将使迭代更容易,因为每个元素只属于一个项目。

正如大家已经提到的,您将在“youtube\u showreel\u description”上遇到冲突。像这样的怎么样

// values (stays the same - no need to reformat)
$values = array(
  array(
    'youtube_showreel_url_1' => 'youtube1.com',
    'youtube_showreel_description' => 'youtube1.com desc'
  ),
  array(
    'youtube_showreel_url_2' => 'youtube2.com',
    'youtube_showreel_description' => 'youtube2.com desc'
  ),
  array(
    'youtube_showreel_url_3' => 'youtube3.com',
    'youtube_showreel_description' => 'youtube3.com desc'
  ),
  array(
    'youtube_showreel_url_4' => 'youtube4.com',
    'youtube_showreel_description' => 'youtube4.com desc'
  )
);

// the good stuff
$result = array_map(function($v) {
  return array(
    'url'         => array_shift($v),
    'description' => $v['youtube_showreel_description']
  );
}, $values);


// result
array(4) {
  [0]=>
  array(2) {
    ["url"] => string(12) "youtube1.com"
    ["description"] => string(17) "youtube1.com desc"
  }
  [1]=>
  array(2) {
    ["url"] => string(12) "youtube2.com"
    ["description"] => string(17) "youtube2.com desc"
  }
  [2]=>
  array(2) {
    ["url"] => string(12) "youtube3.com"
    ["description"] => string(17) "youtube3.com desc"
  }
  [3]=>
  array(2) {
    ["url"] => string(12) "youtube4.com"
    ["description"] => string(17) "youtube4.com desc"
  }
}

这应该很容易做到,但您的结果有许多相同的关键字(即,
youtube\u showreel\u description
),因此它们会覆盖。你能像用
url\u35;
one那样给它们编号吗?