尝试在迭代时重写数组值仅存储第一个字符

时间:2017-01-08 11:17:03

标签: php arrays

数据是一个数组数组,每个数组的大小都是两个元素 我试图将每个第一个元素重写为字符串'hello',但是在var_dump上只看到第一个字符'h'。

function replace() {
   foreach($this->data as $record)
      $this->data[$record[0]] = 'hello';
}

function print_array() {
   foreach($this->data as $record)
      var_dump($record[0]);

我怎么能写出整个单词?

2 个答案:

答案 0 :(得分:0)

在您的示例中,$record[0]包含值,而不是键值。

用于

由于$this->data是一个索引数组,您可以这样做:

function replace()
{
    $count = count($this->data);
    for ($i = 0; $i < $count; $i++) {
        $this->data[$i][0] = 'Hello';
    }
}

使用foreach

如果您想使用foreach

function replace()
{
    foreach ($this->data as $key => $value) {
        // We're not gonna use $value here, since it's just a copy
        $this->data[$key][0] = 'Hello';
    }
}

使用foreach和参考

如果您想使用foreach并引用(请注意& - 在foreach中$value之前签名)

function replace()
{
    foreach ($this->data as &$value) {
        // Now we can use $value directly, since it's a reference
        $value[0] = 'Hello';
    }
}

答案 1 :(得分:0)

在你的foreach循环中,声明$key并在向数组中添加/打印元素时使用它。

class Test {

    private $data = [
                        ['test1', 'my1', 'name1'],
                        ['test2', 'my2', 'name2']

                    ];

    private function replace() {

        foreach ($this->data as $k=>$v) {

                $this->data[$k][0] = 'hello';  
        }
    }

   public function print_array() {

      $this->replace();
      foreach($this->data as $k=>$v) {

          echo $this->data[$k][0];
          echo '<br>';

      }
   }  
}

//Object
$new = new Test();
$new->print_array();

输出

hello
hello