Php 移除阵列中的父结构,同时保持子结构完整

Php 移除阵列中的父结构,同时保持子结构完整,php,arrays,Php,Arrays,我的数组如下所示: array(2) { ["highpriority"]=> array(2) { [0]=> // 1st item array(2) { [0]=> string(14) "Do the laundry" [1]=> string(6) "Sunday" } [1]=> // 2nd item array(2) { [0]=>

我的数组如下所示:

array(2) {
  ["highpriority"]=>
  array(2) {
    [0]=> // 1st item
    array(2) {
      [0]=>
      string(14) "Do the laundry"
      [1]=>
      string(6) "Sunday"
    }
    [1]=> // 2nd item
    array(2) {
      [0]=>
      string(19) "Study for math exam"
      [1]=>
      string(6) "Monday"
    }
  }
  ["lowpriority"]=>
  array(2) {
    [0]=> // 3rd item
    array(2) {
      [0]=>
      string(15) "Get car cleaned"
      [1]=>
      string(9) "Next week"
    }
    [1]=>
    array(2) { // 4th item
      [0]=>
      string(33) "Buy The Amazing Spider-Man on DVD"
      [1]=>
      string(5) "Later"
    }
  }
}
我试图创建一个函数,通过将项目的编号作为输入来返回项目的字符串。例如,如果输入$number=3,我的函数readItem($number)将返回“GetCarCleanned”。有高优先级和低优先级节点,但会添加更多节点,如mediumpriority、toppriority等。。。我正在考虑删除数组中的父节点(高优先级和低优先级节点),我可以使用$array[$number]读取项目字符串,对吗

使用数组_shift(),只保留高优先级的子级。我怎样才能让每一位家长都接受?我在这里找到了一些代码,但它依赖于通过名称了解父项:。如果有帮助的话,我的数组中的数据将使用我前面问题中的nickb代码从CSV中读取:


我相信这个解决方案很简单,但是除了foreach循环和手动向新数组添加子数组之外,还有其他方法吗?谢谢你

由于你的优先级有名字,要知道它们的正确顺序,唯一的方法就是在某处列举它们

// Assume the data array is named $tasks.
function readItem($number) {
  $priorities = ['highpriority', 'lowpriority'];
  $total = 0;
  foreach($priorities as $priority) {
    $thiscount = count($tasks[$priority]);
    if($number <= $total + $thiscount) {
      // The item is in this priority.
      return $tasks[$priority][$number - $total - 1][0]
    }
    $total += $thiscount;
  }
}
//假设数据数组名为$tasks。
函数readItem($number){
$priorities=[“高优先级”、“低优先级”];
$total=0;
foreach($priority作为$priority){
$thiscont=count($tasks[$priority]);
如果($number在那里:

<?php

$input = array(
    'high' => array(
        array('Do the laundry', 'Sunday'),
        array('Study math', 'Monday')
    ),
    'low' => array(
        array('Get car cleaned', 'Next Week')
    )
);

$output = array();
array_walk_recursive($input, function($item, $key) use (&$output) {
    $index = count($output) - $key;
    $output[$index][] = $item;
});

$readItem = function($index) use ($output) {
    return $output[$index-1];
};

var_dump($readItem(3));

?>

这正是我想要的,谢谢!我接受了你的回答