未定义的偏移错误

时间:2014-05-29 10:44:58

标签: php arrays multidimensional-array

我有一个mutidimention数组,我想要它的键:

Array
(
    [1] => Array
        (
            [0] => 0
            [1] => TEST1
            [2] => TEST12
            [3] => TEST13
            [4] => TEST14
            [5] => TEST15
            [6] => TEST16
        )

    [2] => Array
        (
            [0] => 0
            [1] => TEST2
            [2] => TEST21
            [3] => TEST22
            [4] => TEST23
            [5] => TEST24
            [6] => TEST25
        )
    )

所以我这样做了,它有效:

foreach ( $data_1 as $k=>$v )
        {
          $data_1[$k]['bla0'] = $data_1[$k][0];
            $data_1[$k]['bla1'] = $data_1[$k][1];
            $data_1[$k]['bla2'] = $data_1[$k][2];
            $data_1[$k]['bla3'] = $data_1[$k][3];
            $data_1[$k]['bla4'] = $data_1[$k][4];
            $data_1[$k]['bla5'] = $data_1[$k][5];
            $data_1[$k]['bla6'] = $data_1[$k][6];
          unset($data_1[$k][0],$data_1[$k][1],$data_1[$k][2],$data_1[$k][3],$data_1[$k][4],$data_1[$k][5],$data_1[$k][6]);  

        }

但它显示我: 注意:未定义的偏移:在...中为1 注意:未定义的偏移:2中...
注意:未定义的偏移:在...中为3 注意:未定义的偏移量:4英寸... 注意:未定义的偏移:在...中为5 注意:未定义的偏移:在...中为6 这个错误的任何来源?非常感谢!

5 个答案:

答案 0 :(得分:0)

<?php
    $array = array(
                    1=>array(
                        1=>'a',
                        2=>'b'),

                    2=>array(
                        1=>'c',
                            2=>'d'
                        )
                    );
    foreach($array as $key=>&$val){
            for($i=1;$i<=count($val);$i++){
                $val['balh'.$i] = $val[$i];
                unset($val[$i]);
            }   
    }
    print_r($array);
?>

这样你就会传递指针。

Array
(
    [1] => Array
        (
            [balh_1] => a
            [balh_2] => b
        )

    [2] => Array
        (
            [balh_1] => c
            [balh_2] => d
        )

)

这将是输出

答案 1 :(得分:0)

<?php

$data_1 = array(array(0, 'test', 'test1'), array(0, 'test', 'test1'));




foreach ( $data_1 as $k => $v ){

    $data_1[$k]['bla0'] = $data_1[$k][0];
    $data_1[$k]['bla1'] = $data_1[$k][1];
    $data_1[$k]['bla2'] = $data_1[$k][2];
    unset($data_1[$k][0]);  
    unset($data_1[$k][1]);  
    unset($data_1[$k][2]);  

}

echo '<pre>'; print_r($data_1);

答案 2 :(得分:0)

正如评论中指出的那样,最可能的解释是你的一些子数组不包含6个元素。

如果这是有效且有意的(你打算让一些子数组包含少于6个元素),那么建议你的代码在每个数组中处理可变数量的元素。

这样的事可能适合你;

foreach ($data_1 as &$subArray) {
    foreach (array_keys($subArray) as $k) {
        $subArray["bla$k"] = $subArray[$k];
        unset($subArray[$k]);
    }
}

答案 3 :(得分:0)

您的代码可以正常工作。问题是你没有检查子数组的长度,或者在尝试处理它之前该元素是否存在。

通过子阵列自动循环更好,因此您不必为较短的子阵列显式调用不存在的索引。

<?php
foreach ($data_1 as $key => $val) {
    foreach(array_keys($val) as $i) {
        $data_1[$key]["bla{$i}"] = $data_1[$key][$i];
        unset($data_1[$key][$i]);
    }
}
?>

答案 4 :(得分:0)

这将解决您的问题

<?php
$data_1 =  array(
        '1' =>  array(
            0 => '0',
            1 => 'TEST1',
            2 => 'TEST12',
            3 => 'TEST13'),
        '2' =>  array(
            0 => '0',
            1 => 'TEST2',
            2 => 'TEST22',
            3 => 'TEST23')
    );

foreach ( $data_1 as $k=>$v )
    {
      $data_1[$k]['bla0'] = $v[0];
        $data_1[$k]['bla1'] = $v[1];
        $data_1[$k]['bla2'] = $v[2];
        $data_1[$k]['bla3'] = $v[3];

      unset($data_1[$k][0],$data_1[$k][1],$data_1[$k][2],$data_1[$k][3]);  

    }

    echo '<pre>'; print_r($data_1); echo '</pre>';
?>