Php 数组中未定义索引,但它存在

Php 数组中未定义索引,但它存在,php,arrays,Php,Arrays,我有一个数组。这是它的var_转储: array(1) { ["139"]=> string(5) "my_data" } <pre> <?php $arr = array("139" => "some_data", "test" => "other_data"); $good = (object) $arr; $good_arr = (array) $good; $bad = json_decode(json_encode($a

我有一个数组。这是它的var_转储:

array(1) {
  ["139"]=>
  string(5) "my_data"
}
<pre>
<?php
  $arr = array("139" => "some_data", "test" => "other_data");

  $good = (object) $arr;
  $good_arr = (array) $good;

  $bad = json_decode(json_encode($arr));
  $bad_arr = (array)($bad);

  var_dump ($arr);
  foreach ($arr as $k => $v)
    var_dump (gettype ($k));    // 139 is integer

  var_dump ($good);
  foreach ($good as $k => $v)
    var_dump (gettype ($k));    // 139 is integer

  var_dump ($good_arr);
  foreach ($good_arr as $k => $v)
    var_dump (gettype ($k));    // 139 is integer

  var_dump ($bad);
  foreach ($bad as $k => $v)
    var_dump (gettype ($k));    // 139 is string

  var_dump ($bad_arr);
  foreach ($bad_arr as $k => $v)
    var_dump (gettype ($k));    // 139 is string

  var_dump ($arr[139]);         // string(9) "some_data"
  var_dump ($arr["139"]);       // string(9) "some_data"
  var_dump ($arr["test"]);      // string(10) "other_data"

  var_dump ($good->{139});      // NULL
  var_dump ($good->{"139"});    // NULL
  var_dump ($good->{"test"});   // string(10) "other_data"

  var_dump ($good_arr[139]);    // string(9) "some_data"
  var_dump ($good_arr["139"]);  // string(9) "some_data"
  var_dump ($good_arr["test"]); // string(10) "other_data"

  var_dump ($bad->{139});       // string(9) "some_data"
  var_dump ($bad->{"139"});     // string(9) "some_data"
  var_dump ($bad->{"test"});    // string(10) "other_data"

  var_dump ($bad_arr[139]);     // NULL
  var_dump ($bad_arr["139"]);   // NULL
  var_dump ($bad_arr["test"]);  // string(10) "other_data"
?>
</pre>
我们看到,我们有键139,它是string(键的var dumps:string(3)“139”)。 我想从数组中获取元素,代码如下:

$bad_array = $this->get('some_data');

var_dump($bad_array);
var_dump($my_key);
var_dump(isset($bad_array[$my_key]));
var_dump($bad_array[$my_key]);
以下是输出:

array(1) {
  ["139"]=>
  string(5) "my_data"
}
string(3) "139" // my key output
bool(false) // it's not isset
Notice: Undefined index: 139 in /my_file_path.php on line 89
NULL

为什么???我有一个字符串变量,所有的键都是字符串。怎么可能呢?

我有一个数组,然后我把它保存到redis。保存后,我通过json_decode(json_encode($ar))构造将数组强制转换为对象

$redis->save($array);
$this->object = json_decode(json_encode($array));
...
然后我再次向数组中投射:

$ar = (array)$this->obj;
如果我愿意,我就无法访问数组属性。 解决方案

$this->object = json_decode(json_encode($array), true); // get array
...
if (is_object($ar)) {
    $ar = (array)$ar;
}

奇怪的事情…

简短回答

数组
对象
键入强制转换

长答案

一组测试代码:


奇怪的是,你得到了
字符串(5)
“我的数据”尝试
var\u转储(bin2hex($my\u key),bin2hex(key($bad\u array)))
,然后看看你得到了什么。请发布你构造数组的代码。@Ryan对我来说,这似乎是
var\u转储($bad\u array)的值
@HAL9000它尽可能包含
字符串(3)“139”
see@Ryan. 这是我的错。为了清晰起见,我在帖子中稍微修改了代码。我的应用程序中有5char字符串。
json_decode($json_arr, true);