繁体   English   中英

PHP的注意:数组到字符串的转换

[英]php Notice: array to string conversion

大家好,我是php的新手,也是堆栈溢出的新手,但是我确实对php有一些了解,我想做的是从api函数返回的数组调用中获取一个值是

$character->getSlot('head');

使用print_r给我:

Array ( 
[icon] => http://url to image location
[name] => Wizard's Petasos 
[slot] => head )

如果我回显$ character-> getSlot('head','name); 在第19行给我C:\\ xampp \\ htdocs \\ test \\ index.php并仅返回单词Array

这是index.php的部分

<?php
include('api.php');

// Call API
$API = new LodestoneAPI();

// Search for: Demonic Pagan on Sargatanas
$character = $API->get(array(
"name" => "Darka Munday",
"server" => "Ragnarok"
));

// Basic character data
echo "Character ID: " . $character->getID(); 
$ID = $character->getID();
$API->parseProfile($ID);
$Character = $API->getCharacterByID($ID);
echo $character->getSlot('head', 'name');

和api的部分,以防万一

// GEAR
public function setGear($Array)
{
$this->Gear['slots'] = count($Array);
$GearArray = NULL;

// Loop through gear equipped
    $Main = NULL;
                    foreach($Array as $A)
            {
                // Temp array
                $Temp = array();

                // Loop through data
                $i = 0;
                foreach($A as $Line)
                {
                        // Item Icon
                        if (stripos($Line, 'socket_64') !== false) { $Data = trim(explode('&quot;', $A[$i + 1])[1]); $Temp['icon'] = $Data; }
                        if (stripos($Line, 'item_name') !== false) { $Data = trim(str_ireplace(array('>', '"'), NULL, strip_tags(html_entity_decode($A[$i + 2])))); $Temp['name'] = htmlspecialchars_decode(trim($Data), ENT_QUOTES); }
                        if (stripos($Line, 'item_name') !== false) {
                        $Data = htmlspecialchars_decode(trim(html_entity_decode($A[$i + 3])), ENT_QUOTES);
                        if (
                                strpos($Data, " Arm") !== false ||
                                strpos($Data, " Grimoire") !== false ||
                                strpos($Data, " Tool") !== false
                                        )
                                        { $Main = $Data; $Data = 'Main'; }
                    $Temp['slot'] = strtolower($Data);
                                }

                                // Increment
                                $i++;
            }

            // Slot manipulation
                                $Slot = $Temp['slot'];
                                    if (isset($GearArray[$Slot])) { $Slot = $Slot . 2; }

                                    // Append array
                                    $GearArray['numbers'][] = $Temp;
                                    $GearArray['slots'][$Slot] = $Temp;
                                    }

                                    // Set Gear
                                    $this->Gear['equipped'] = $GearArray;

                                    // Set Active Class
                                    $classjob = str_ireplace('Two-Handed ', NULL, explode("'", $Main)[0]);
                                    $this->Stats['active']['class'] = $classjob;
                                    if (isset($this->Gear['soul crystal'])) { $this->Stats['active']['job'] = str_ireplace("Soul of the ", NULL, $this->Gear['soul crystal']['name']); }
                                    }
                                    public function getGear()           { return $this->Gear; }
    public function getEquipped($Type)  { return $this->Gear['equipped'][$Type]; }
    public function getSlot($Slot)      { return $this->Gear['equipped']['slots'][$Slot]; }

解决这个问题的方法可能非常简单,即时消息确实很愚蠢,但是任何帮助都会很棒:)预先感谢

public function getSlot($Slot) { 
     return $this->Gear['equipped']['slots'][$Slot]; 
}

getSlot方法只有一个参数。 您正在传递另一个参数,但getSlot方法返回数组。

您可以这样:

public function getSlot($Slot, $param = null) {
    if(empty($param)) {
          return $this->Gear['equipped']['slots'][$Slot]; 
    } else {
        if(isset($this->Gear['equipped']['slots'][$Slot][$param] )) {
            return $this->Gear['equipped']['slots'][$Slot][$param];
        } else {
            return null;
        }
    }     
}

要么

echo $character->getSlot('head')['name'] // If version is >= 5.4.*

如果版本<5.4。*

$slot = $character->getSlot('head');
echo $slot['name'];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM