• 技术文章 >后端开发 >php教程

    PHP 对象、数组间的转换

    巴扎黑巴扎黑2016-11-23 13:35:10原创535

    /**

    * PHP 对象、数组间的转换

    *

    * @author flyer0126

    * @since 2012/05/03

    **/


    // 1. 利用(array)和(object),简单处理

    $objTemp = (object)array();

    $objTemp->a = 1;

    $objTemp->b = 2;

    $objTemp->c = 3;

    $arrTemp = (array)$objTemp;

    print_r($objTemp);

    print_r($arrTemp);


     /**

    stdClass Object

    (

    [a] => 1

    [b] => 2

    [c] => 3

    )

    Array

    (

    [a] => 1

    [b] => 2

    [c] => 3

    )

    **/


    // PS:简单的(array)和(object)只能处理单层的数据,对于多层的数组和对象转换则无能为力。


    // 2. 多维数组与对象间的转换处理


    /**

    * 将对象转换为多维数组

    *

    **/

    function objectToArray($d) {

    if (is_object($d)) {

    // Gets the properties of the given object

    // with get_object_vars function

    $d = get_object_vars($d);

    }


    if (is_array($d)) {

    /*

    * Return array converted to object

    * Using __FUNCTION__ (Magic constant)

    * for recursive call

    */

    return array_map(__FUNCTION__, $d);

    }

    else {

    // Return array

    return $d;

    }

    }

    /**

    * 将多维数组转换为对象

    *

    **/

    function arrayToObject($d) {

    if (is_array($d)) {

    /*

    * Return array converted to object

    * Using __FUNCTION__ (Magic constant)

    * for recursive call

    */

    return (object) array_map(__FUNCTION__, $d);

    }

    else {

    // Return object

    return $d;

    }

    }


    // Useage:

    $init = new stdClass;

    $init->foo = "Test data";

    $init->bar = new stdClass;

    $init->bar->baaz = "Testing";

    $init->bar->fooz = new stdClass;

    $init->bar->fooz->baz = "Testing again";

    $init->foox = "Just test";


    // Convert array to object and then object back to array

    $array = objectToArray($init);

    $object = arrayToObject($array);


    // Print objects and array

    print_r($init);

    print_r($array);

    print_r($object);


     /**

    stdClass Object

    (

    [foo] => Test data

    [bar] => stdClass Object

    (

    [baaz] => Testing

    [fooz] => stdClass Object

    (

    [baz] => Testing again

    )

    )

    [foox] => Just test

    )

    Array

    (

    [foo] => Test data

    [bar] => Array

    (

    [baaz] => Testing

    [fooz] => Array

    (

    [baz] => Testing again

    )

    )

    [foox] => Just test

    )

    stdClass Object

    (

    [foo] => Test data

    [bar] => stdClass Object

    (

    [baaz] => Testing

    [fooz] => stdClass Object

    (

    [baz] => Testing again

    )

    )

    [foox] => Just test

    )

    **/


    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:php当中换行问题 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 聊聊PHP escapeshellarg函数使用的中文问题• PHP原生类的总结分享• 分享PHP函数使用小工具(附代码示例)• PHP安全编码总结(经验分享)• 非常全面!PHP常见漏洞代码总结!
    1/1

    PHP中文网