【问题标题】:Php cannot access attributes of an array of objectsphp 无法访问对象数组的属性
【发布时间】:2019-06-25 01:06:21
【问题描述】:

我有一个这种形式的对象数组,

[{value => 1, name => "Ha"},
{value => 2, name => "Hi"},
{value => 3, name => "Ho"},
.....]

和一个应该返回给定名称的值的函数,

功能是:

public function get_value_from_name($myArray, $name){
$arrays = $myArray;

    foreach ($arrays as $arr){
    if ($name == $arr->name){
        return $arr->value;
      }
    }
    return false;
    }
 }

当我使用函数并以这种方式传递数组和字符串时 get_value_from_name($myArray, "嗨") 我希望得到一个 2 但它返回 false, 我尝试跟踪结果,foreach 循环遍历整个数组,但我认为 $arr->name 没有给出任何东西,我不确定。 你能检查一下我的函数是否有问题吗,我是 PHP 新手。

提前致谢。

编辑**********更新: 这就是我调试时得到的结果

public function get_value_from_name($arr, $names){ //$arr: {[2], [2], [2], [2] + 72 more} $names: "Hi"

$arrays = $arr; //{ $arrays: {[2], [2], [2], [2] + 72 more}
  foreach ( $arrays as $array ){ // $arrays: {[2], [2], [2], [2] + 72 more} $array: {value => 79, name => "HiHiHiHiHiHi"}[2]
     if ( $array->name ==  $names) //{$names: "Hi"
     return $array->value; 
     }
  }
return false;
}

我的解决方案 我设法使它以这种方式工作,但是有人可以解释为什么第一个功能不起作用,

public function get_id_from_name($arr, $names){
$arrays = $arr;

$nameArray = array_column($arrays, 'name');
$valueArray = array_column($arrays, 'value');

 foreach (array_combine($valueArray, $nameArray) as $value=> $name) {
   if ($name == $names) {
   return $value;
 }
}
return false;
}

【问题讨论】:

    标签: php arrays object


    【解决方案1】:

    您的代码有误。它应该:

    ...    
        foreach ($arrays as $arr){
          if ($name == $arr->name){
            return $arr->value;
          }
        } // this is mistake
        return false;
     ...
    

    【讨论】:

    • 感谢您的回答,函数是:foreach ($arrays as $arr){ if ($name == $arr->name){ return $arr->value; } } 返回假;我输入了代码而不是复制粘贴,所以它应该可以工作吗?
    【解决方案2】:

    你可以这样做,

    <?php
    $obj = array();
    $obj1 = new stdClass();
    $obj1->value = 1;
    $obj1->name = 'Ha';
    $obj2 = new stdClass();
    $obj2->value = 2;
    $obj2->name = 'Hi';
    $obj3 = new stdClass();
    $obj3->value = 3;
    $obj3->name = 'Ho';
    $obj = [$obj1,$obj2,$obj3];
    
    function get_value_from_name($arrays, $name){
        foreach ($arrays as $arr){
         if ($name == $arr->name){
            return $arr->value;
         }
       }
     }
    
     echo get_value_from_name($obj,'Ho');
    ?>
    

    演示: https://3v4l.org/TkjGe

    【讨论】:

    • 即使当我取消返回 false 时它也无法正常工作,并且认为它应该与两者一起工作,如果有帮助,我已经添加了调试结果的片段。它在没有找到任何匹配的情况下到达循环的结尾
    • 这是因为 $names='Hi' 不匹配任何嵌套对象的名称
    • 值:26 有一个名字:'Hi'
    • 似乎你的对象数组和你说的不一样,你检查过我的演示了吗,它应该适用于任何长度?
    • 你在foreach 之后又错过了{。请正确检查我给定的 sn-p 代码
    【解决方案3】:

    我设法使它与此功能一起使用,有人可以解释为什么第一个不起作用:

    public function get_id_from_name($arr, $names){
    $arrays = $arr;
    
    $nameArray = array_column($arrays, 'name');
    $valueArray = array_column($arrays, 'value');
    
     foreach (array_combine($valueArray, $nameArray) as $value=> $name) {
       if ($name == $names) {
       return $value;
     }
    }
    return false;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      相关资源
      最近更新 更多