【问题标题】:How to move multiple PHP array elements using keys? [closed]如何使用键移动多个 PHP 数组元素? [关闭]
【发布时间】:2012-12-28 14:58:59
【问题描述】:

我需要使用 cms_before 或 cms_after 键从数组中移动元素。 例如,文件夹 B 在文件夹 A 之后,使用的是 GUID (0E3B180C-F4AA-484F-A19D-318E6D4D2A6C)。

数组:

大批 ( [0] => 数组 ( [cms_parent_node] => 0 [cms_before] => [cms_after] => [cms_guid] => 0E3B180C-F4AA-484F-A19D-318E6D4D2A6C [cms_title] => 档案 A [级别] => 数组 ( [0] => 数组 ( [cms_parent_node] => 0E3B180C-F4AA-484F-A19D-318E6D4D2A6C [cms_before] => [cms_after] => [cms_guid] => D94840DC-7CD8-E7AA-7C69-A237306D24E6 [cms_title] => 档案 A.A [级别] => 数组 ( [0] => 数组 ( [cms_parent_node] => D94840DC-7CD8-E7AA-7C69-A237306D24E6 [cms_before] => [cms_after] => [cms_guid] => 1B20700B-70F0-FFE5-47AC-3DA35460C702 [cms_title] => 档案 A.A.A [级别] => 数组 ( ) ) ) ) ) ) [1] => 数组 ( [cms_parent_node] => 0 [cms_before] => [cms_after] => 1CBF252E-0C28-36E9-D5DF-66F361FB00E9 [cms_guid] => 57F64452-B6BE-3039-F30A-1BE413936A71 [cms_title] => 档案 C [级别] => 数组 ( ) ) [2] => 数组 ( [cms_parent_node] => 0 [cms_before] => [cms_after] => 57F64452-B6BE-3039-F30A-1BE413936A71 [cms_guid] => 44269A70-FF01-EB17-7437-8B1EFB746E0D [cms_title] => 档案 D [级别] => 数组 ( ) ) [3] => 数组 ( [cms_parent_node] => 0 [cms_before] => [cms_after] => 0E3B180C-F4AA-484F-A19D-318E6D4D2A6C [cms_guid] => 1CBF252E-0C28-36E9-D5DF-66F361FB00E9 [cms_title] => 档案 B [级别] => 数组 ( ) ) )

返回数组必须是这个顺序:

一个 甲. AA 乙 C D

结果:

大批 ( [0] => 数组 ( [cms_parent_node] => 0 [cms_before] => [cms_after] => [cms_guid] => 0E3B180C-F4AA-484F-A19D-318E6D4D2A6C [cms_title] => 档案 A [级别] => 数组 ( [0] => 数组 ( [cms_parent_node] => 0E3B180C-F4AA-484F-A19D-318E6D4D2A6C [cms_before] => [cms_after] => [cms_guid] => D94840DC-7CD8-E7AA-7C69-A237306D24E6 [cms_title] => 档案 A.A [级别] => 数组 ( [0] => 数组 ( [cms_parent_node] => D94840DC-7CD8-E7AA-7C69-A237306D24E6 [cms_before] => [cms_after] => [cms_guid] => 1B20700B-70F0-FFE5-47AC-3DA35460C702 [cms_title] => 档案 A.A.A [级别] => 数组 ( ) ) ) ) ) ) [1] => 数组 ( [cms_parent_node] => 0 [cms_before] => [cms_after] => 0E3B180C-F4AA-484F-A19D-318E6D4D2A6C [cms_guid] => 1CBF252E-0C28-36E9-D5DF-66F361FB00E9 [cms_title] => 档案 B [级别] => 数组 ( ) ) [2] => 数组 ( [cms_parent_node] => 0 [cms_before] => [cms_after] => 1CBF252E-0C28-36E9-D5DF-66F361FB00E9 [cms_guid] => 57F64452-B6BE-3039-F30A-1BE413936A71 [cms_title] => 档案 C [级别] => 数组 ( ) ) [3] => 数组 ( [cms_parent_node] => 0 [cms_before] => [cms_after] => 57F64452-B6BE-3039-F30A-1BE413936A71 [cms_guid] => 44269A70-FF01-EB17-7437-8B1EFB746E0D [cms_title] => 档案 D [级别] => 数组 ( ) ) )

【问题讨论】:

  • 你能发布你的测试数据集吗?我正在寻找可以让我们向您展示程序化解决方案的东西。我们需要的数据描述类似于 SSCCE.org
  • 试着提出一个问题。
  • 我很难看出您的确切问题是什么。该数组似乎已经按照您需要的顺序排列。
  • 好的,抱歉,我想使用数组中的特定位置移动元素。
  • 当我读到它时,他想要一个一维数组,子级别以空格为前缀。但是确实,这个问题很不清楚。

标签: php arrays sorting


【解决方案1】:

类似的东西。

function reorder($folders) {
  $current = null;
  $after = array();

  foreach ($folders as &$folder) {
    if ($folder['cms_after']) $after[$folder['cms_after']] =& $folder;
      else $current =& $folder;
  }

  $list = array();
  while ($current) {
    $list[] = $current;
    $current = isset($after[$current['cms_guid']]) ? $after[$current['cms_guid']] : null;
  }

  return $list;
}

锻炼你的提问技巧......

【讨论】:

  • 感谢您的回答,但我不想使用 cms_title 但 cms_after 或 cms_before。必须使用 cms_guid 进行匹配
  • 检查新答案。它应该做你想做的事。
  • 那个!效果很好!如果定义,如何使用 cms_before 更改函数添加可能性。
  • 您应该使用 cms_after 或 cms_before,但不能同时使用。如果数据一致,则无关紧要。
  • 是的,我会这样做并设置一个选项“放在上面”:) 非常感谢。
猜你喜欢
  • 2011-11-10
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多