【问题标题】:PHP Push simple array values in multidimensional array not workingPHP在多维数组中推送简单数组值不起作用
【发布时间】:2020-08-16 02:22:20
【问题描述】:

编辑:更新代码。请查看注释行:

这是我的问题:

我有 2 个数组:

$numbers = array(0,3,8);

$data = array('January' => array('BATH' => array('ID', 'user', 'type'), 'KITCHEN' => array('ID', 'user', 'type')), 'february' => array('BATH' => array('ID', 'user', 'type'), 'KITCHEN' => array('ID', 'user', 'type')), 'march' => array('BATH' => array('ID', 'user', 'type'), 'KITCHEN' => array('ID', 'user', 'type')));

预期的输出必须是:

array (size=6)
  'January' => 
    array (size=2)
      'BATH' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'KITCHEN' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'total_lunar' => int '0' // // This is the first value from first array
  'february' => 
    array (size=2)
      'BATH' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'KITCHEN' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
       'total_lunar' => int '3' // This is the second value from first array
  'march' => 
    array (size=2)
      'BATH' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'KITCHEN' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
       'total_lunar' => int '8' // This is the last value from first array

我的 PHP 代码是:

for ($i = 0; $i < count($numbers); $i++) 
{
    foreach ($data as $key => $value) 
    {
        $data[$key]['total_lunar'][$i] =  $numbers[$i];
    }
}

我不知道为什么,结果设置了每个数组而不是第一个数组的每个值:

array (size=6)
  'January' => 
    array (size=2)
      'BATH' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'KITCHEN' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'total_lunar' => 
          array (size=3)
             0 => int 0
             1 => int 3
             2 => int 8
  'february' => 
    array (size=2)
      'BATH' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'KITCHEN' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
       'total_lunar' => 
          array (size=3)
             0 => int 0
             1 => int 3
             2 => int 8
  'march' => 
    array (size=2)
      'BATH' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
      'KITCHEN' => 
        array (size=3)
          0 => string 'ID' (length=2)
          1 => string 'user' (length=4)
          2 => string 'type' (length=4)
       'total_lunar' => 
          array (size=3)
             0 => int 0
             1 => int 3
             2 => int 8

['total_lunar'] 键应返回一个值作为上述预期输出,而不是所有数组值。到处寻找解决方案,但无法解决这个问题。

【问题讨论】:

  • $data 数组的第二级是键 'BATH' 等,而不是数字索引。
  • $data[$key][$i] 不存在可推送。只需使用$data[$key][$i] = $numbers[$i];,请参阅php.net/manual/en/function.array-push.php 处的注释
  • 您似乎仍然遇到数组问题。如有疑问,请在您的代码中添加 print_r($data[$key]); 以查看您正在查看的数组中的真正内容
  • array_push($data[$key]['0'], $numbers[$i]);
  • 是的,感谢您这次的理解。

标签: php arrays multidimensional-array array-push


【解决方案1】:

保持简单。我想这就是你要找的东西?

$n=0;
foreach($data as &$d) {
    $d['total_lunar'] = $numbers[$n++];
}

使用这个你会得到的预期输出:

echo '<pre>';
print_r($data);
echo '</pre>';

【讨论】:

  • 更新帖子。请看。
  • 所以你想要一个 total_lunar 键而不是 [0]?
  • 我添加了它,但它返回了 numbers 数组中的所有值,而不是像我预期的输出一样一一返回。
  • 是的,它很实用。感谢一百万次。
  • 我以前试过这个,但在foreach 中缺少&amp;$d 中的&amp;。
猜你喜欢
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
相关资源
最近更新 更多