【问题标题】:create multidimensional array from matching array keys从匹配的数组键创建多维数组
【发布时间】:2018-03-04 17:02:04
【问题描述】:

需要通过匹配数组中的键来创建多维数组。

数组 1:

[
 'slide_name_1'  => 'lorem ipsum',
 'slide_title_1' => 'lorem ipsum',
 'slide_name_2'  => 'lorem ipsum',
 'slide_title_2' => 'lorem ipsum',
]

我需要创建这个:

[0] => array (
       'slide_name_1'  => 'lorem ipsum 1',
       'slide_title_1' => 'lorem ipsum 1',
       )
[1] => array (
       'slide_name_2'  => 'lorem ipsum 2',
       'slide_title_2' => 'lorem ipsum 2',
       )

我正在考虑运行一些嵌套的 foreach 循环并仅匹配键的数字部分(例如:substr($key, strrpos($key, '_') + 1);)。

当然,事实证明这比我预期的要困难。任何建议将不胜感激。

【问题讨论】:

  • 那么,什么是匹配?最后一个号码?为strrpos 提供的代码有什么问题?
  • 你可以使用explode('_', $key),然后使用它的最后一个元素。
  • 如果元素的顺序和数量始终相同,您可以使用array_chunk将数组拆分为块
  • 我想只匹配键的数字部分,是的。 strrpos 可以很好地拉动它们。我碰壁的地方是创建一个新的多点阵列。
  • @kash101 创建一个关联数组,并使用该数字作为键。

标签: php arrays multidimensional-array


【解决方案1】:

你在正确的轨道上。虽然不需要嵌套的foreach 循环。只用一个。

喜欢:

$arr = array (
 'slide_name_1'  => 'lorem ipsum',
 'slide_title_1' => 'lorem ipsum',
 'slide_name_2'  => 'lorem ipsum',
 'slide_title_2' => 'lorem ipsum',
);

$result = array();
foreach( $arr as $key => $val ){
    $k = substr($key, strrpos($key, '_') + 1); //Get the number of the string after _

    //Normally, this line is actually optional. But for strict PHP without this will create error.
    //This line will create/assign an associative array with the key $k
    //For example, the $k is 1, This will check if $result has a key $k ( $result[1] ) 
    //If not set, It will assign an array to $result[1] = array()
    if ( !isset( $result[ $k ] ) ) $result[ $k ] = array(); //Assign an array if $result[$k] does not exist

    //Since you already set or initiate array() on variable $result[1] above, You can now push $result[1]['slide_name_1'] = 'lorem ipsum 2';
    $result[ $k ][ $key ] = $val . " " . $k; //Push the appended value ( $value and the number after _ )
}

//Return all the values of an array
//This will convert associative array to simple array(index starts from 0)
$result = array_values( $result ); 

这将导致:

数组

(
    [0] => Array
        (
            [slide_name_1] => lorem ipsum 1
            [slide_title_1] => lorem ipsum 1
        )

    [1] => Array
        (
            [slide_name_2] => lorem ipsum 2
            [slide_title_2] => lorem ipsum 2
        )

)

【讨论】:

  • ...这将是 O(n)。它比嵌套循环要好得多(最小 O(n^2))
  • 太棒了.....我第四次嵌套 foreach 只是为了接近。这完美地工作。非常感谢
  • 乐于帮助@kash101
  • @kash101 不用担心。 :) 请检查我上面的解释。如果您有任何问题,请告诉我
  • @Eddie 知道了。试图通过从添加到数组的最后一个元素中获取键来在许多嵌套循环之一中做类似的事情。是我得到的最接近的。当然,我在那次尝试中也得到了 65 个索引。再次感谢脚本,尤其是解释。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多