Php не может получить доступ к атрибутам массива объектов - PullRequest
0 голосов
/ 25 июня 2019

У меня есть массив объектов этой формы,

[{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, но он возвращает ложь, Я попытался отследить результаты, 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;
}

Ответы [ 3 ]

1 голос
/ 25 июня 2019

У вас есть ошибка в коде. Его следует:

...    
    foreach ($arrays as $arr){
      if ($name == $arr->name){
        return $arr->value;
      }
    } // this is mistake
    return false;
 ...
0 голосов
/ 25 июня 2019

Мне удалось заставить его работать с этой функцией, может кто-нибудь объяснить, почему первый не сработал:

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;
}
0 голосов
/ 25 июня 2019

Вы можете сделать это следующим образом,

<?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');
?>

DEMO: https://3v4l.org/TkjGe

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...