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

时间:2016-03-26 00:00:02

标签: php

$color_hash是一个stdObject

stdClass Object
(
    [07] => GRAY
    [67] => BLUE
)

print_r($color_hash); 返回

stdClass Object ( [07] => GRAY [67] => BLUE )

我将$color_hash转换为数组

$colour_hash_array = (array)$colour_hash;

返回

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

尝试

var_dump($colour_hash_array);

返回

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

我试试

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

log_me($colour_hash_array['67']);//Return empty. HERE IS THE PROBLEM


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);
        }
    }
}

这太奇怪了。 我哪里错了?

使用

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

    }

打印

[2016年3月26日07:04:11亚洲/ Ho_Chi_Minh]灰色

[2016年3月26日07:04:11亚洲/ Ho_Chi_Minh]蓝色

更新:

我试图创建一个数组

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

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

这很有效。我无法理解:(

3 个答案:

答案 0 :(得分:2)

您想要返回一个关联数组,您要通过将解码的json(它是一个对象)转换为数组来尝试这样做。但是,这可能无法正常工作,正如您可能已经看到的那样。但是,json_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 

您可以分别看到var_dumps()$decoded的{​​{1}}

$decoded_array

解决方案

因此,您定义// 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_hash函数添加第二个参数true,就像这样

json_decode

输出结果应为

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

<强>参考

答案 1 :(得分:0)

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

所以这个:

$arr = [
    07 => 'GRAY',
    67 => 'BLUE'
];

结果如下:

Array(
    7 => 'GRAY',
    67 => 'BLUE
)

看看0是如何从键的前面掉下来的?整数不存储该零。

要引用该密钥,您可以使用$arr[7]$arr['7']

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

所以这个:

$arr = [
    '07' => 'GRAY',
    '67' => 'BLUE'
];

结果如下:

Array(
    '07' => 'GRAY',
    '67' => 'BLUE
)

既然密钥是字符串,那么 引用它就是确切的字符串,所以现在只有$arr['07']可以使用。

希望有所帮助!

答案 2 :(得分:0)

对不起我的prev st st answer,我重现这种行为,请看代码:

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