无法在php中获取简单数组的数组值

无法在php中获取简单数组的数组值,php,Php,$color\u hash是一个stdObject stdClass Object ( [07] => GRAY [67] => BLUE ) print\u r($color\u hash) 返回 我将$color\u hash转换为数组 $colour_hash_array = (array)$colour_hash; 返回 Array ( [07] => GRAY [67] => BLUE ) 尝试 返回 array(2) {

$color\u hash
是一个stdObject

stdClass Object
(
    [07] => GRAY
    [67] => BLUE
)
print\u r($color\u hash)
返回

我将
$color\u hash
转换为数组

$colour_hash_array = (array)$colour_hash;
返回

Array
(
    [07] => GRAY
    [67] => BLUE
)
尝试

返回

array(2) { ["07"]=> string(4) "GRAY" ["67"]=> string(4) "BLUE" }
我试着

真奇怪。 我错在哪里

使用

 foreach($colour_hash_array as $color)
    {
        log_me($color);

    }
印刷品

[26-Mar-2016 07:04:11亚洲/胡志明]格雷

[26-Mar-2016 07:04:11亚洲/胡志明]蓝色

更新:

我试图创建一个数组

$colour_hash_array = array("07" => "GRAY","67"=>"BLUE");

log_me($colour_hash_array['07']);//Return GRAY
log_me($colour_hash_array['67']);//Return BLUE

这很有效。我再也不明白了:(

当你定义数组时,你使用的是整数作为键(我应该说我是这样假设的,但在我看来这是最有可能的)

因此:

$arr = [
    07 => 'GRAY',
    67 => 'BLUE'
];
$arr = [
    '07' => 'GRAY',
    '67' => 'BLUE'
];
结果如下:

Array(
    7 => 'GRAY',
    67 => 'BLUE
)
Array(
    '07' => 'GRAY',
    '67' => 'BLUE
)
看到0是如何从键的前面删除的吗?整数不会存储该零

要引用该键,可以使用
$arr[7]
$arr['7']


如果保留该零对您很重要,那么请使用字符串来定义键,而不是整数,并且零应保留:

因此:

$arr = [
    07 => 'GRAY',
    67 => 'BLUE'
];
$arr = [
    '07' => 'GRAY',
    '67' => 'BLUE'
];
结果如下:

Array(
    7 => 'GRAY',
    67 => 'BLUE
)
Array(
    '07' => 'GRAY',
    '67' => 'BLUE
)
既然键是一个字符串,那么就有了来引用它作为精确的字符串,所以现在只有
$arr['07']
可以工作了


希望有帮助!

对不起,我的回答很愚蠢,我复制了这个行为,请参阅代码:

define('WP_DEBUG', true);

function log_me($message) {
    if (WP_DEBUG === true) {
        if (is_array($message) || is_object($message)) {
            error_log(print_r($message, true));
        } else {
            error_log($message);
        }
    }
}
//decode json and convert to array
$colour_hash_array = (array)json_decode('{"07":"GREY", "67":"BLUE", "09":"BLACK"}');

print_r($colour_hash_array);   

foreach($colour_hash_array as $key => $color) {
   print 'type:' . gettype($key) . ':' . $key . "\n";
}

log_me($colour_hash_array['07']);//Return GRAY

log_me($colour_hash_array['67']);//undefine offset

log_me($colour_hash_array['09']);//Return BLACK
但如果我们使用get_object_vars将对象转换为数组,则此代码工作正常:

define('WP_DEBUG', true);

function log_me($message) {
    if (WP_DEBUG === true) {
        if (is_array($message) || is_object($message)) {
            error_log(print_r($message, true));
        } else {
            error_log($message);
        }
    }
}

//decode json and convert to array
$colour_hash_array = get_object_vars(json_decode('{"07":"GREY", "67":"BLUE", "09":"BLACK"}'));

print_r($colour_hash_array);


foreach($colour_hash_array as $key => $color) {
   print 'type:' . gettype($key) . ':' . $key . "\n";
}

log_me($colour_hash_array['07']);//Return GRAY

log_me($colour_hash_array['67']);//Return BLUE

log_me($colour_hash_array['09']);//Return BLACK

您希望返回一个关联数组,您正试图通过强制转换解码的json(这是一个对象)来实现这一点但是,正如您可能已经看到的那样,这不能正常工作。但是,
json\u decode
函数中的第二个参数是将解码器设置为返回一个关联数组,而不是一个对象,这正是您要查找的。这里有一个示例:

$encoded = json_encode(array("07" => "GRAY","67"=>"BLUE"));

$decoded = json_decode($encoded);             // Returns stdClass-object
$decoded_array = json_decode($encoded, true); // Return an associative array, 
                                              // which is what you're looking for 
您可以看到
$decoded
$decoded\u数组的
var\u dumps()

// var_dump($decoded);
object(stdClass)#7 (2) { 
    ["07"]=> string(4) "GRAY" 
    ["67"]=> string(4) "BLUE" 
} 

// var_dump($decoded_array);
array(2) { 
    ["07"]=> string(4) "GRAY" 
    [67]=> string(4) "BLUE" 
}
解决方案

因此,在定义
$colour\u hash
时,只需向
json\u decode
函数添加第二个参数
true
,如下所示

$colour_hash_array = json_decode($matches[1], true);

输出的结果应该是

log_me($colour_hash_array['07']); //Returns GRAY
log_me($colour_hash_array['67']); //Returns BLUE
参考资料


日志的作用到底是什么?即使我尝试$c=$colour\u hash\u数组['67'],echo$c;它返回空值这很奇怪!代码中$colour\u hash\u数组是如何定义的?我更新了我的问题,$colour\u hash\u数组是如何定义的?您如何使用php版本?您的代码在php 5.6中对我来说很好,
0
只是八进制符号。07(基数8)==7(基数10)。在这种情况下,
$arr[07],$arr[7],$arr['7']
给出相同的结果。同意,如果密钥定义为整数,在基数10或8中,
$arr[07]
$arr[7]
$arr['7']
应该可以正常工作,尽管
$arr['07']
不会。但是,如果键定义为字符串,则
$arr['07']
将起作用,
$arr[07]
$arr[7]
$arr['7']
将抛出一个
未定义的偏移量
错误。