代码之家  ›  专栏  ›  技术社区  ›  Dogbert

在PHP中作为数组键的数字字符串

php
  •  92
  • Dogbert  · 技术社区  · 15 年前

    是否可以使用类似 "123" 作为PHP数组中的键,而不转换为整数?

    $blah = array('123' => 1);
    var_dump($blah);
    

    印刷品

    array(1) {
      [123]=>
      int(1)
    }
    

    我想要

    array(1) {
      ["123"]=>
      int(1)
    }
    
    11 回复  |  直到 8 年前
        1
  •  77
  •   Hamish    12 年前

    the manual

    foo = { '10' : 'bar' };
    
    foo['10']; // "bar"
    foo[10]; // "bar"
    foo[012]; // "bar"
    foo['012']; // undefined!
    
        2
  •  37
  •   David    9 年前

    stdClass

    $data =  new stdClass;
    $data->{"12"} = 37;
    $data = (array) $data;
    var_dump( $data );
    

    array(1) {
      ["12"]=>
      int(37)
    }
    

    json_decode() json_encode()

    $data['12']


    var_dump( $data['12'] ); // int 32
    
        3
  •  11
  •   steampowered Brijesh Verma    14 年前

    $obj = new stdClass();
    $key = '3';
    $obj->$key = 'abc';
    
        4
  •  8
  •   Undolog    13 年前

    $id = 55;
    $array = array(
      " $id" => $value
    );
    

    foreach( $array as $key => $value ) {
      echo $key;
    }
    

        5
  •  5
  •   bcosca    15 年前

    $x=array((string)123=>'abc');
    var_dump($x);
    $x[123]='def';
    var_dump($x);
    

        6
  •  1
  •   Brainfeeder    11 年前

    $data = array_merge($data, $extra); 6 '6' "6" (string)"6" n

    $data = $data + $extra;

        7
  •  1
  •   TarranJones    10 年前

    $array_assoc = cast($arr,'array_assoc');
    
    $array_sequential = cast($arr,'array_sequential');
    
    $obj = cast($arr,'object');
    
    $json = cast($arr,'json');
    
    
    
    function cast($var, $type){
    
        $orig_type = gettype($var);
    
        if($orig_type == 'string'){
    
            if($type == 'object'){
                $temp = json_decode($var);
            } else if($type == 'array'){
                $temp = json_decode($var, true);
            }
            if(isset($temp) && json_last_error() == JSON_ERROR_NONE){
                return $temp;
            }
        }
        if(@settype($var, $type)){
            return $var;
        }
        switch( $orig_type ) {
    
            case 'array' :
    
                if($type == 'array_assoc'){
    
                    $obj = new stdClass;
                    foreach($var as $key => $value){
                        $obj->{$key} = $value;
                    }
                    return (array) $obj;
    
                } else if($type == 'array_sequential'){
    
                    return array_values($var);
    
                } else if($type == 'json'){
    
                    return json_encode($var);
                }
            break;
        }
        return null; // or trigger_error
    }
    
        8
  •  1
  •   GigiManco    8 年前

         $a = array('foo','bar','baz');
         echo "RESULT: ", json_encode($a, JSON_FORCE_OBJECT);
    

         RESULT: {"0" : "foo", "1": "bar", "2" : "baz"}
    
        9
  •  0
  •   fisharebest    13 年前

    $array=array(''=>'empty', '0'=>'zero', '1'=>'one');
    echo "Test 1\n";
    foreach ($array as $key=>$value) {
        if ($key == '') { // Error - wrongly finds '0' as well
            echo "$value\n";
        }
    }
    echo "Test 2\n";
    foreach ($array as $key=>$value) {
        if ($key === '0') { // Error - doesn't find '0'
            echo "$value\n";
        }
    }
    

    echo "Test 3\n";
    foreach ($array as $key=>$value) {
        if ((string)$key == '') { // Cast back to string - fixes problem
            echo "$value\n";
        }
    }
    echo "Test 4\n";
    foreach ($array as $key=>$value) {
        if ((string)$key === '0') { // Cast back to string - fixes problem
            echo "$value\n";
        }
    }
    
        10
  •  0
  •   Nico Schefer    9 年前

    $data = new stdClass;
    $data->{"0"} = "Zero";
    $data->{"1"} = "One";
    $data->{"A"} = "A";
    $data->{"B"} = "B";
    
    $data = (array)$data;
    
    var_dump($data);
    /*
    Note the key "0" is correctly saved as a string:
    array(3) {
      ["0"]=>
      string(4) "Zero"
      ["A"]=>
      string(1) "A"
      ["B"]=>
      string(1) "B"
    }
    */
    
    //Now let's access the associative array via the values 
    //given from var_dump() above:
    var_dump($data["0"]); // NULL -> Expected string(1) "0"
    var_dump($data[0]); // NULL (as expected)
    var_dump($data["1"]); // NULL -> Expected string(1) "1"
    var_dump($data[1]); // NULL (as expected)
    var_dump($data["A"]); // string(1) "A" (as expected)
    var_dump($data["B"]); // string(1) "B" (as expected)
    
        11
  •  -1
  •   drchuck    10 年前

    https://en.wikipedia.org/wiki/ASCII

    for(...) {
    
        $database[$sha.'!'] = array($sha,$name,$age);
    }
    
    ksort($database);
    $row = reset($database);
    $topsha = $row[0];
    
    推荐文章