【问题标题】:Foreach returns only first letter of an array element?Foreach 只返回数组元素的第一个字母?
【发布时间】:2012-04-10 13:23:39
【问题描述】:

There is almost identical question,但我不知道该怎么做。

我刚开始使用 OO PHP,我的班级中有这个功能:

public function show() {
    foreach($this->data['fields'] as $field) {
        $type = $field['type'];
        echo $type;
    }
}

这是输入数据:

my_function('id', 
    array(
    'foo' => 'bar',
    'bar' => 'foo',
    'fields' => array(
        'type' => 'my_type',
        'foo' => 'bar',
        'etc.' => 'value'),
    ),
);

当然echo $field['type'] 只返回my_type (m) 的第一个字母。

我不能只使用echo $field,因为我在这个数组下有多个键,它返回my_typebarvalue 而不是my_type$field[0] (mbv) 也是如此。我该怎么办?

【问题讨论】:

    标签: php arrays oop foreach


    【解决方案1】:

    $this->data['fields'] 中有三个键值对:type => my_typefoo => baretc. => value。当您使用此foreach 语法时,$field包含该对的值,它始终是一个字符串。

    索引运算符(变量后面的括号,如$foo['bar'])也适用于字符串,并返回给定索引处的字符。类型杂耍将字符串'type' 转换为整数0,这样就得到了字符串的第一个字符。

    实际上,如果echo $field 不行,我不确定你想要什么。除非询问,否则 PHP 不会打印换行符或分隔符,因此您可能想尝试 echo $field . ' ' 并查看这些值实际上是不同的。

    【讨论】:

    • 我做了echo $field,之后一切都清楚了!出色的答案,非常感谢,这就是 SO 的样子(解释事情而不是直接给出答案/代码)。谢谢! :)
    【解决方案2】:

    当您遍历以下字段时:

    array(
       'type' => 'my_type',
       'foo' => 'bar',
       'etc.' => 'value'
    )
    

    使用

    foreach($this->data['fields'] as $field) 
    

    在每次迭代中,$field 已经是您正在寻找的值(my_type, bar, value),所以正如@zneak 提到的那样,执行 $field['type'] 将使 php 将 'type' 调整为0,因此你得到第一个字符。

    要在键入键时获取值,可以执行以下操作:

    public function show() {
        foreach($this->data['fields'] as $key => $field) {
            if($key == 'type') echo $field;
        }
    }
    

    【讨论】:

      【解决方案3】:

      foreach遍历$data['fields'] 中的所有元素。在第一次迭代中,$field 将是 "my_type",在第二次迭代中,$field 将是 "bar",以此类推。即,在每次迭代中,$field 将是一个字符串,而不是一个数组。

      您需要一个数组数组才能使该循环有意义,例如:

      'fields' => array(
          array(
              'type' => 'my_type',
              'foo' => 'bar',
              'etc.' => 'value',
          ),
          ...
      )
      

      【讨论】:

        【解决方案4】:

        你的数组“字段”是这样的:

            $fields['type'] = 'my_type';
            $fields['foo'] = 'bar';
            $fields['etc'] = 'value';
        

        意味着,您的数组只有一维。 所以像上面一样访问它。
        在 foreach 中,您告诉 php 遍历键(类型、foo 等)。所以 $field 已经是 (my_type, bar, value)了!

        // You either need to write:
        foreach($this->data as $field) {
            $type = $field['fields']['type'];
            echo $type;
        }
        
        // Or
        foreach($this->data['fields'] as $field) {
        if ($field == 'type') {
                $type = $field;
                echo $type;
        }
        }
        
        // Or
        foreach($this->data['fields'] as $key => $val) {
        if ($key == 'type') {
                $type = $val;
                echo $type;
        }
        }
        

        【讨论】:

          猜你喜欢
          • 2011-07-12
          • 2021-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-22
          • 1970-01-01
          相关资源
          最近更新 更多