php数组与对象相互转换方法

 更新时间:2016年11月25日 15:09  点击:1433

php教程数组与对象相互转换方法

function arrayToObject($e){
    if( gettype($e)!='array' ) return;
    foreach($e as $k=>$v){
        if( gettype($v)=='array' || getType($v)=='object' )
            $e[$k]=(object)arrayToObject($v);
    }
    return (object)$e;
}

function objectToArray($e){
    $e=(array)$e;
    foreach($e as $k=>$v){
        if( gettype($v)=='resource' ) return;
        if( gettype($v)=='object' || gettype($v)=='array' )
            $e[$k]=(array)objectToArray($v);
    }
    return $e;
}

关于数组转换为对象,在phpx有看到一些帖子讨论

$andy = array();
$andy['a'] = 1;
$andy['b'] = 2;
$andy['c'] = 3;

把andy强制转换为数组,似乎引用的方便些了,主要是变成了->

$andy = array();
$andy = (object)$andy;
$andy->a = 1;
$andy->b = 2;
$andy->c = 3;

还嫌它麻烦,再用StdClass

$andy = new StdClass;
$andy->a = 1;
$andy->b = 2;
$andy->c = 3;

stdClass 是PHP的一个基类,所有的类几乎都继承这个类,所以任何时候都可以被new,可以

让这个变量成为一个object。同时,这个基类又有一个特殊的地方, 就是没有方法。在这里

还有一点是对象和数组资源耗费的问题:PHP5的对象的独特性,对象在任何地方被调用,都

是引用地址型的,所以相对消耗的资源会少一 点。在其它页面为它赋值时是直接修改,而不

是引用一个拷贝。数组在程序的使用中应该是最方便的,然而数组的每次被引用($a = $b)

,其实都是创建了一个副本,而且,数组被unset后,还是占用了内存(没有测试过)。还有

一个函数arrayobject,可以直接将数组转化为 对象这也是一个好办法哦。
ArrayObject::__construct -- Construct a new array object

<?php
$array = array('1' => 'one',
'2' => 'two',
'3' => 'three');

$arrayobject = new ArrayObject($array);

print_r($arrayobject);
?>

ArrayObject Object
(
    [1] => one
    [2] => two
    [3] => three
)

试验了一下对象转换为数组,也可以强制转换

$arr = (array)$obj;

如下例子转换结果,可对比:

Tag Object
(
    [name] => main
    [text] =>
    [parrent] =>
    [content] =>
    [props教程] => Array
        (
        )

    [inner] => Array
        (
        )

    [level] => 0
)

Array
(
    [name] => main
    [text] =>
    [parrent] =>
    [content] =>
    [props] => Array
        (
        )

    [inner] => Array
        (
        )

    [level] => 0
)

php教程文件操作,包括对文件函数fopen,is_writable,fwrite,fclose来进行文件操作,下面先看实例。

<?php
$filename = "html/cache.txt";
$contents = "我是张斌";
if(is_writable($filename)){
if(($handle = fopen($filename,"a") )== false){
echo "写入文件 $filename 失败";
exit();
}
if(fwrite($handle,$contents) == false){
echo "写入文件$filename失败";
exit();
}
echo "写入文件 $filename 成功";

fclose($handle);
}else{
echo "文件$filename不可写入";
}
?>

fopen() 函数打开文件或者 URL。
如果打开失败,本函数返回 FALSE。
语法
fopen(filename,mode,include_path,context)
参数 描述
filename 必需。规定要打开的文件或 URL。
mode 必需。规定要求到该文件/流的访问类型。可能的值见下表。
include_path 可选。如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。
context 可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。

定义和用法
fwrite() 函数写入文件(可安全用于二进制文件)。
语法
fwrite(file,string,length)
参数 描述
file 必需。规定要写入的打开文件。
string 必需。规定要写入文件的字符串。
length 可选。规定要写入的最大字节数。
说明
fwrite() 把 string 的内容写入文件指针 file 处。 如果指定了 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。
fwrite() 返回写入的字符数,出现错误时则返回 false。

<?php
$file = fopen("test.txt","w");
echo fwrite($file,"Hello World. Testing!");
fclose($file);
?>

is_writable
( PHP 4中, PHP 5中)

is_writable -告诉是否filename是写

描述
布尔is_writable (字符串$文件名)
返回TRUE ,如果文件存在且可写。该文件名参数可能是一个目录名称,让您可以检查,如果是可写的目录。

请记住, PHP的可访问该文件的用户ID的Web服务器运行(通常是'谁' ) 。安全模式的限制是没有考虑到。

<?php
$filename = 'test.txt';
if (is_writable($filename)) {
    echo 'The file is writable';
} else {
    echo 'The file is not writable';
}
?>

php教程 用户cookie登录验证与mysql教程数据登录验证的方法

 

<?php
unset($username);
if ($_COOKIE['login']) {
    list($c_username,$cookie_hash) = split(',',$_COOKIE['login']);
    if (md5($c_username.$secret_word) == $cookie_hash) {
        $username = $c_username;
    } else {
        print "You have sent a bad cookie.";
    }
}

if ($username) {
    print "Welcome, $username.";
} else {
    print "Welcome, anonymous user.";
}
?>


 

看个完整的与数据库教程连接登录的代码

<html>

 <head>
  <title>Log-In Page</title>
 </head>

 <body>
 Please enter your user details to log-in here...

 <form action = "authenticate.php" method = "post">
 Username:<br>
 <input type = "text" name = "username">
 <br><br>
 Password:<br>
 <input type = "text" name = "password">
 <br><br>
 <input type = "submit" value = "Log In">
 </form>

 </body>

</html>

File: authenticate.php


<?php

$username = $_POST['username'];
$password = $_POST['password'];
$self =     $_SERVER['PHP_SELF'];
$referer =  $_SERVER['HTTP_REFERER'];

if( ( !$username ) or ( !$password ) )
{ header( "Location:$referer" ); exit(); }

$conn=@mysql_connect( "localhost", "userName", "password" ) or die( "Could not connect" );

$rs = @mysql_select_db( "my_database", $conn ) or die( "Could not select database" );
$sql = "select * from users where user_name="$username" and password = password( "$password" )";
 
$rs = mysql_query( $sql, $conn ) or die( "Could not execute query" );

$num = mysql_numrows( $rs );

if( $num != 0 )
{
  $msg = "<h3>Welcome $username - your log-in succeeded!</h3>";
}
else
{
  header( "Location:$referer" ); exit();
}
?>

<html>

 <head>
  <title>Log-In Authenticated</title>
  </head>

  <body>
   <?php echo( $msg ); ?>
  </body>

</html>

unlink() 函数删除文件。
若成功,则返回 true,失败则返回 false。
语法
unlink(filename,context)
参数 描述
filename 必需。规定要删除的文件。
context 可选。规定文件句柄的环境。Context 是可修改流的行为的一套选项。

 

<?php教程
   $file_delete = "home/meeta/my.php";
  
   if (unlink($file_delete)) {
      echo "The file was deleted successfully.", "n";
   } else {
      echo "The specified file could not be deleted. Please try again.", "n";
   }
?>

下面加了判断文件是否存在

<?php
  $myfile = "./test1.txt";
  if (file_exists($myfile)) {
    $result=unlink ($myfile);
    echo $result;
  }
  ?>

file_exists() 函数检查文件或目录是否存在。
如果指定的文件或目录存在则返回 true,否则返回 false。
语法
file_exists(path)

array preg_split ( string pattern, string subject [, int limit [, int flags]])

返回一个数组,包含 subject 中沿着与 pattern 正则表达式来匹配的边界所分割的子串。

如果指定了 limit,则最多返回 limit 个子串,如果 limit 是 -1,则意味着没有限制,可以用来继续指定可选参数 flags。

flags 可以是下列标记的任意组合(用按位或运算符 | 组合):

PREG_SPLIT_NO_EMPTY
如果设定了本标记,则 preg_split() 只返回非空的成分

看个实例

<?php教程
$word_count = $word_length = 0;

if ($fh = fopen('novel.txt','r')) {
  while (! feof($fh)) {
    if ($s = fgets($fh)) {
      $words = preg_split('/s+/',$s,-1,PREG_SPLIT_NO_EMPTY);
      foreach ($words as $word) {
        $word_count++;
        $word_length += strlen($word);
      }
    }
  }
}

print sprintf("The average word length over %d words is %.02f characters.",
              $word_count,
              $word_length/$word_count);
?>

简单应用

<?
$user_info = "+J+++G+++++w";
$fields = preg_split("/+{1,}/", $user_info);
while ($x < sizeof($fields)) :
   print $fields[$x]. "<br>";
   $x++;
endwhile;
?>

由于分割后变成了数组,所以我们要利用foreach 来遍历输出了。

<?php
   $delimitedText = "+A+++G+++++++++++C";
   $fields = preg_split("/+{1,}/", $delimitedText);
    foreach($fields as $field) echo $field."<br />";
?>

<?
$text = "a, o, p";
$fruitarray = preg_split( "/, | and /", $text );
print "<pre>n";
print_r( $fruitarray );
print "</pre>n";
?>
 

[!--infotagslink--]

相关文章

  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • java8如何用Stream查List对象某属性是否有重复

    这篇文章主要介绍了java8如何用Stream查List对象某属性是否有重复的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-11
  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • R语言 如何删除指定变量或对象

    这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • php数组操作 键名比较 差集 交集赋值

    本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
  • C#二维数组基本用法实例

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • JavaScript预解析,对象详解

    这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...2021-11-10
  • Javascript类型转换的规则实例解析

    这篇文章主要介绍了Javascript类型转换的规则实例解析,涉及到javascript类型转换相关知识,对本文感兴趣的朋友一起学习吧...2016-02-27
  • php curl模拟post请求和提交多维数组的示例代码

    下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <&#63;php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
  • 美图秀秀把普通照片快速转换成卡通效果教程

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说下把普通照片快速转换成卡通效果的教程,各位想知道具体制作步骤的使用者们,那么下面就快阿里跟着小编一起看一...2016-09-14
  • C#数组的常用操作方法小结

    Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • 如何在Spring WebFlux的任何地方获取Request对象

    这篇文章主要介绍了如何在Spring WebFlux的任何地方获取Request对象,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下...2021-01-26
  • C# 拷贝数组的几种方法(总结)

    下面小编就为大家带来一篇C# 拷贝数组的几种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • PHP 二维数组根据某个字段排序的具体实现

    本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求。 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。 遇到这个...2014-06-07
  • 牛叉的Jquery――Jquery与DOM对象的互相转换及DOM的三种操作

    只有jQuery对象才能调用jQuery类库的各种函数,同样有些dom对象的属性和方法在jQuery上也是无法调用的,不过基本上jQuery类库提供的函数包含了所有的dom操作。这就需要我们知道如何将jQuery对象和DOM的相互转换的方法。1...2015-10-30
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#读取文件所有行到数组的方法

    这篇文章主要介绍了C#读取文件所有行到数组的方法,涉及C#针对文件及数组的相关操作技巧,需要的朋友可以参考下...2020-06-25