【问题标题】:Can't get a specific array structure无法获取特定的数组结构
【发布时间】:2011-12-07 18:11:13
【问题描述】:

我几个小时以来一直在闲逛以获得特定的数组,但无法弄清楚。

我得到这个带有 foreach 循环的起始数组:

Array
(
   [0] => Title 1
   [1] => Image 1.jpg
   [2] => Title 2
   [3] => Image 2.png
   [4] => Text 1
)

我生成了一个数组来排序第一个数组(当用户拖放第一个数组的元素时)

Array
(
   [0] => 1
   [1] => 4
   [2] => 0
   [3] => 2
   [4] => 3
)

我需要将第二个数组 (1, 4, 0, 2, 3) 的值与第一个数组 ([0],1 ...) 的键链接到 get正是这样

Array
(
   [1] => Text 1
   [4] => Image 2.png
   [0] => Image 1.jpg
   [2] => Title 1
   [3] => Title 2
)

我试过 array_combine 但它没有给我上面的结果。

我已经制作了一个架构来理解这个问题:

【问题讨论】:

    标签: php arrays rank


    【解决方案1】:

    您正在获取第二个数组的每个值并将其用作第二个数组的键以获取第一个数组的键使用第二个数组的顺序并键入输出:

    $mapped = array();
    
    foreach($arr2 as $value)
    {
        $mapped[$value] = $arr1[$arr2[$value]];
    }
    

    输出:

    Array
    (
        [1] => Text 1
        [4] => Image 2.png
        [0] => Image 1.jpg
        [2] => Title 1
        [3] => Title 2
    )
    

    Demo

    【讨论】:

    • 很高兴它有帮助。我认为原始数据中键和值的交叉使得这很难理解,我也花了一些时间来了解如何组合数据。
    • 是的,我知道,我花了更多时间来理解如何解释我的问题:p
    【解决方案2】:

    这是一些伪代码(我复制粘贴,懒得更正它成为有效的PHP我更正了它):

    <?php
    $items = Array
    (
       0 => 'Title 1',
       1 => 'Image 1.jpg',
       2 => 'Title 2',
       3 => 'Image 2.png',
       4 => 'Text 1',
    );
    $order = Array
    (
       0 => 1,
       1 => 4,
       2 => 0,
       3 => 2,
       4 => 3,
    );
    
    foreach ($order as $itemPosition) {
        $sorted[] = $items[ $itemPosition ];
    }
    
    // optionally 
    ksort($sorted);
    var_dump($sorted);
    

    当然,这是假设您的 $order 数组按顺序排列了键。如果不是,您可能还想在执行foreach 之前对其执行ksort

    http://codepad.org/Lq8iw29w

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      相关资源
      最近更新 更多