生成具有相等数量元素的子数组

时间:2019-06-14 15:49:54

标签: php arrays

我有这段代码,将从csv文件生成多维数组。我需要生成具有相等数量的子数组的类似数组。第一个数组的内容将被拆分成块,并且是csv内容,第二个数组需要用随机数填充。 我正在使用此代码,但是我只能生成一个仅包含156个随机数的数组,而这不是我所需要的。我如何生成一个由156个子数组组成的数组,每个子数组由8个数字组成? 这是我的代码:

foreach( $csv->getRecords() as $records){
  unset($records['nux']);
  foreach (array_chunk($records, 8) as $record) {
    $nSamples[] = $record;
    $nLabels[] = 'vc';
    for( $i = 0; $i < count($nSamples); $i++ ){
      $lSamples[$i] = mt_rand(1,90);
    }
  }
}

更新:

这是两个数组的示例,我需要第二个数组与第一个相似:

随机数数组:

array(156) {
  [0]=>
  array(156) {
    [0]=>
    int(20)
    [1]=>
    int(84)
    [2]=>
    int(17)
    [3]=>
    int(64)
    [4]=>
    int(86)
    [5]=>
    int(17)
    [6]=>
    int(66)
    [7]=>
    int(35)
    [8]=>
    int(59)
    [9]=>
    int(54)
    [10]=>
    int(87)
...

正确的数组:

array(156) {
  [0]=>
  array(8) {
    [0]=>
    string(1) "1"
    [1]=>
    string(2) "19"
    [2]=>
    string(2) "26"
    [3]=>
    string(2) "44"
    [4]=>
    string(2) "61"
    [5]=>
    string(2) "89"
    [6]=>
    string(2) "84"
    [7]=>
    string(2) "64"
  }
  [1]=>
  array(8) {
    [0]=>
    string(1) "5"
    [1]=>
    string(2) "19"
    [2]=>
    string(2) "28"
    [3]=>
    string(2) "43"
    [4]=>
    string(2) "58"
    [5]=>
    string(2) "82"
    [6]=>
    string(1) "1"
    [7]=>
    string(2) "18"
  }

要回复评论,156不是硬编码的,而是csv记录的数量。

1 个答案:

答案 0 :(得分:1)

由于随机数与CSV文件无关,因此您可以在读取CSV的循环之外全部执行此操作。只需使用嵌套循环:

$lSamples = [];
for ($i = 0; $i < 156; $i++) {
    for ($j = 0; $j < 8; $j++) {
        $lSamples[$i][] = mt_rand(1, 90);
    }
}

如果实际上应该为CSV的每一行都是8个随机数,而不是156个硬编码,那么只需将内部循环放在foreach()循环中即可。

$lSamples = [];
foreach( $csv->getRecords() as $i => $records){
  unset($records['nux']);
  foreach (array_chunk($records, 8) as $record) {
    $nSamples[] = $record;
    $nLabels[] = 'vc';
    for ($j = 0; $j < 8; $j++) {
      $lSamples[$i][] = mt_rand(1, 90);
    }
  }
}