Ошибка при получении первого свойства в массиве PHP для использования в операторе switch - PullRequest
0 голосов
/ 20 декабря 2018

Я работаю над ответом массива в PHP Laravel, в результате чего я получаю несколько наборов данных в ответе.Например, внутри массива 1-й элемент массива может быть региональный менеджер или городской менеджер или локальный менеджер .Получаю ответ в виде объекта JSON и преобразую его в массив PHP.Далее, я пытаюсь написать оператор switch, чтобы проверить, является ли 1-й ключ массива определенным значением, а затем перенаправить на конкретное представление.Проблема в том, что мне немного трудно использовать переключатель для проверки первого значения в массиве

Контроллер, содержащий получаемый ответ и оператор switch в нем

public function getAgentHierachy(){

        $resp = GeneralHelper::global_Curl([],'api/v1/b2b/life/agent-hierarchy')->data;

        //Converting from JSON object to PHP array
        $rs =  json_decode(json_encode($resp),true);

        $result = '';

        switch($rs)
        {
            case $rs->regional_manager:

                $result = view('pages.general.pol', compact('rs'));
            break;

            case $rs->city_manager:

                $result = view('B2B::pages.general.pol', compact('rs'));
            break;

            case $rs->local_manager:

                $result = view('B2B::pages.general.pol', compact('rs'));

            break;

        }

        return $result;               
    }

Примерные данные, которые я могу получить в качестве ответа, содержащие различные случаи

array:1 [▼
  "regional_manager" => array:1 [▼
    0 => array:3 [▶]
  ]
]

array:1 [▼
  "city_manager" => array:1 [▼
    0 => array:3 [▶]
  ]
]

array:1 [▼
  "local_manager" => array:1 [▼
    0 => array:3 [▶]
  ]
]

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Это не совсем то, как работает оператор switch, поскольку вы уже определили, что хотите запустить переключатель на ключе массива, а не на самом массиве, следующее должно помочь:

$allArrayKeys = array_keys($rs); // get all keys
switch ($allArrayKeys[0]) { // switch whatever is the first key
    case 'regional_manager':
      // Do stuff for this case here...
     break;
    case 'city_manager':
      // Do stuff for this case here...
      break;
    case 'local_manager':
      // Do stuff for this case here...
      break;
}
0 голосов
/ 20 декабря 2018

Удалите true в качестве второго аргумента из функции json_decode(), тогда вы сможете получить доступ к данным json в форме объекта, как вы это делали в случае переключения.

$rs =  json_decode(json_encode($resp)); 

Примечание:Я полагаю, вы передаете неверный аргумент в switch()

Edit - 01: вы можете изменить свой код так, чтобы он выглядел примерно так:

        $viewName = $res = '';
        $str = 'regional_manager';
        switch($str)
        {
            case 'regional_manager':
                $res = $rs->regional_manager;
                $viewName = 'pages.general.pol';
            break;

            /*
              and so on
             */

        } //switch case ends
        $result = view($viewName,compact('res'));
        return $result;
...