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) 将返回“清理汽车”。有高优先级和低优先级节点,但会添加更多节点,如中优先级、最高优先级等......我我正在考虑删除数组中的父母(高优先级和低优先级节点)我可以使用 $array[$number] 来读取项目字符串,对吗?

使用 array_shift(),只剩下高优先级的孩子。我怎样才能让它通过每个父母?我在这里找到了一些代码,但它依赖于通过名称知道父级:删除“包装”数组(删除父级,保留子级)。如果有帮助,我的数组中的数据是使用我之前问题中的 nickb 中的代码从 CSV 读取的:Grouping CSV input by columns

我确信解决方案是微不足道的,但是除了 foreach 循环和手动将子项添加到新数组之外还有其他方法吗?谢谢

4

2 回答 2

0

由于您的优先级有名称,了解它们正确顺序的唯一方法是在某处枚举它们。

// 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;
  }
}
于 2012-08-02T10:28:10.463 回答
0

你去:

<?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));

?>
于 2012-08-02T10:49:27.577 回答