php中echo(),print(),print_r()用法

 更新时间:2016年11月25日 17:07  点击:1277
从我对echo(),print(),print_r()这个函数的理解是echo可输入字符串变量常量,print与echo差不多,但print_r可以打印数组而前两者是不可以的,下面我来详细介绍它们三个的用法与区别吧。


echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print() 只能打印出简单类型变量的值(如int,string)
print_r() 可以打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串

echo — 输出一个或者多个字符串
Descrīption
void echo ( string arg1 [, string ...] ) //返回值为空

 

 代码如下 复制代码
echo "你好","朋友";

print –输出一个字符串

Descrīption

int print ( string arg )//返回值为整形

 代码如下 复制代码
 
print "你好朋友";

可以进行下面操作

 代码如下 复制代码

 

$name=print "nihao n";
$str = 'test print value is'.$name;
eval("$print="$str";");
echo $print;

print_r — 打印关于变量的易于理解的信息。
bool print_r ( mixed expression [, bool return] ) //返回值是布尔型的,参数是mix类型的,可以是字符串,整形,数组,对象类print_r() 显示关于一个变量的易于理解的信息。如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。
print_r() 将把数组的指针移到最后边。
你可以
print_r(str);
print_r(int);
print_r(array);
print_r(obj);

下面我们一个个举例说明一下

四种方法可以输出字符串。 echo

print()

printf()

print_r()
echo
可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。

语法正确: echo "Hello", "World";
语法错误: echo ("Hello", "World");
print()
函数print()打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false。如,

 代码如下 复制代码

if (!print("Hello, World")){

   die("you are not listening to me");

}

printf()
printf()源于C语言中的printf()。该函数输出格式化的字符串。
语法: printf(format,arg1,arg2,arg++)
format   规定字符串以及如何格式化其中的变量;
arg1, arg2, ++ 等参数将插入到主字符串中的百分号 (%) 符号处。该函数是逐步执行的。在第一个 % 符号中,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。
Example: ?php

 代码如下 复制代码

$str = "Hello";

$number = 123;

printf("%s world. Day number %u",$str,$number);

?>
#Results======
Hello world. Day number 123

如果 % 符号多于 arg 参数,则您必须使用占位符。占位符被插入 % 符号之后,由数字和 "$" 组成。请参见例子 3。
Example: ?php

 代码如下 复制代码

$number = 123;

printf("With 2 decimals: %1$.2fbr />With no decimals: %1$u",$number);

?>
#Result
With 2 decimals: 123.00
With no decimals: 123

print_r()和var_dump()
print_r()可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头。如,

 代码如下 复制代码

$a = array('name' => 'Fred', 'age' => '15', 'wife' => 'Wilma');

print_r($a);
Output: Array

{

   [name] => Fred

    [age] => 15

    [wife] => Wilma

}

对象也一样。如,

 代码如下 复制代码

class P {

  var $name = 'nat';

  // ...

}

$p = new P;

print_r($p);
Output: Object

{

[name] => nat

}

但print_r()输出布尔值和NULL的结果没有意义,因为都是打印"n"。因此用var_dump()函数更适合调试

在做内容站时,经常会用到采集软件在互联网上大肆侵略别站的资源,一采集就是几千篇的文章,采集之后 发现内容中有些原站点的超级链接,要是一个个去改的话 很麻烦 所以写了个方法,测试成功。

简单说一下原理,这里重利用的是 PHP 的替换函数 preg_replace,在实际应用中,我们经常使用 preg_replace 去替换一些危险字符或去转换一些斜杠或回车等。preg_replace($1,$2,$3) 有三个重要的参数,其中 $1 是要搜索的字符串,$2 是要替换成的字符串,$3 是要进行替换的字符串。

那么知道了 preg_replace 函数工作的原理,那么进行替换超链接就不难了,我们只需要将参数 $1 和 $2 转换成数组,进行批量替换,以下是方法,测试成功,共享给 phper 。

 代码如下 复制代码

<?php
$str="<a href="xxx">超级链接</a>|<a href="xxx">这是个链接</a><br>";
function removelink($str){
$mode=array("#<a href="(.*)">#iUs","#</a>#iUs");
$want=array("","");
$con=preg_replace($mode,$want,$str);
return $con;
}
echo removelink($str);
?>

 代码如下 复制代码
<?php
$content = file_get_contents('test.html');
$url = 'http://www.111cn.net';  //要换成的新网址
$preg = '/[s]href=("|')[S]*("|')/i';
$replace = ' href="' . $url . '"';
$content = preg_replace($preg, $replace, $content);  //正则替换
create_log('newhtml', $content);  //生成新文件
?>

都是可以的

在php中数组排序有很多函数可以实现的,如果是简单的一维数组排序我们可以使用php 自带的排序函数了,但多维数组时我们需要自己写了。


回来后一直在揪心啊,于是翻了一下书本查阅,给我知道了答案。为了记住它们,我决定来一个数组排序函数大总结。


首先接触的就是PHP数组排序、降序的排序问题。

sort:本函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。
rsort:本函数对数组进行逆向排序(最高到最低)。 删除原有的键名而不仅是重新排序。
asort:对数组进行排序并保持索引关系
arsort:对数组进行逆向排序并保持索引关系

ksort:对数组按照键名排序,保留键名到数据的关联
krsort:对数组按照键名逆向排序,保留键名到数据的关联

natsort:对字母数字字符串进行排序并保持原有键/值的关联
natcasesort:同natsort排序算法,但不区分大小写字母排序


PHP 数组排序(sort)
数字索引数组排序:
函数:sort(array, [sort type])
说明:sort()函数按升序对指定数组(第一个参数)进行排序。
sort函数第二参数作用为指定排序类型,是可选参数,可能的值为:
SORT_REGULAR: 默认值,不改变类型进行排序;
SORT_NUMERIC: 把值作为数字进行排序;
SORT_STRING: 把值作为字符串进行排序;
如数组中有4和”37″,按数字排序,4小于”37″;按字符串排序,4大于”37″;


一、一维数组

假设有一个一维数组,如下:


 $sortArr = array("name"=>"hiro", "age"=>"23", "city"=>"Shanghai", "code"=>"200051");
print_r()输出的原始数组结果为:


 Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )

1.sort()函数:根据数组下标进行升序排列;
print_r()输出的数组结果为(输出时只有数组下标,而不是键名):

1
 Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )

2.rsort()函数:与sort()函数相反,根据数组下标进行降序排列;
print_r()输出的数组结果为(输出时只有数组下标,而不是键名):


 Array ( [0] => hiro [1] => Shanghai [2] => 200051 [3] => 23 )

3.asort()函数:根据数组的键名进行升序排列;
print_r()输出的数组结果为:

1
 Array ( [age] => 23 [code] => 200051 [city] => Shanghai [name] => hiro )

4.arsort()函数:与asort()函数相反,根据数组的键名进行降序排列;
print_r()输出的数组结果为:


 Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

5.ksort()函数:根据数组的键值进行升序排列;
print_r()输出的数组结果为:


 Array ( [age] => 23 [city] => Shanghai [code] => 200051 [name] => hiro )

6.krsort()函数:与ksort()函数相反,根据数组的键值进行降序排列;
print_r()输出的数组结果为:

 代码如下 复制代码


 Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

7.reverse_array()函数:反向当前的数组排列顺序;
print_r()输出的数组结果为:

 

 代码如下 复制代码
 Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )

8.shuffle()函数:随机地排列数组顺序(每次刷新后排列的顺序都不相同);
print_r()输出的数组结果为(只是其中一种随机排列):


 Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )

二、二维数组
假设有一个二维数组,如下:

 代码如下 复制代码

 $person = array(
 array("hiro", "23", "suzhou"),
 array("yoyo", "25", "shanghai"),
 array("janstar", "28", "xinjiang")
);
print_r()输出的原始数组结果为:

1
 Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) )

二维数组的排序是根据每维的键名排序的,所以需要额外地编写比较函数。先举三个例子:

1.按每维的第一个元素升序排列,代码如下:

 代码如下 复制代码

function compare0($x, $y) {
 if($x[0] == $t[0]) {
  return 0;
 } elseif ($x[0] < $y[0]) {
  return -1;
 } else {
  return 1;
 }
}
 
usort($person, compare0);
echo "按第一个元素正向排序:";
print_r($person);
输出的结果如下:

1
 按第一个元素正向排序:Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) )

2.按每维的第三个元素升序排列,代码如下:

 代码如下 复制代码

function compare2($x, $y) {
 if($x[2] == $t[2]) {
  return 0;
 } elseif ($x[2] < $y[2]) {
  return -1;
 } else {
  return 1;
 }
}
 
usort($person, compare2);
echo "按第三个元素正向排序:";
print_r($person);
输出的结果如下:


 按第三个元素正向排序:Array ( [0] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) )

3.按每维的第三个元素升序排列,代码如下:

 代码如下 复制代码
function reverse_compare2($x, $y) {
 if($x[2] == $t[2]) {
  return 0;
 } elseif ($x[2] < $y[2]) {
  return 1; //改变后即可反向
 } else {
  return -1; //改变后即可反向
 }
}
 
usort($person, reverse_compare2);

echo "按第三个元素反向排序:";
print_r($person);
输出的结果如下:

1
 按第三个元素反向排序:

 代码如下 复制代码
Array ( [0] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) )

呵呵,是不是代码多了点,记下了以后方便查阅啊!

 代码如下 复制代码

<?php
error_reporting(0);

/**
* @数字数组排序 可按从大到小或从小到大排序 
*/
function sortArray($array, $choice) {
    $values = array_values($array); // 建立一个数字索引的数组
    $ch = $choice==0 ? min:max; // 参数$choice为0按从小到大排列,否则其他都默认为按从大到小
    do {
        $val = $ch($values); // 找出最大或最小值
        $key = array_search($val,$values); // 取得最大值的键名
        $result[$key] = $val; // 将最大值存入新数组
        unset($values[$key]);
    } while (count($values) > 0);
    return $result;
}

$array = array(100, 1000, 1, 10000);
//$array = sortArray($array, 0);
$array = sortArray($array, 1);
foreach($array as $a) {
    echo "$a ";
}
?>

本文章来给大家介绍一些常用的php获取数组中随机数组的一些实例程序,希望此方法对各位朋友有所帮助哦。

贴一段代码,在php中获取随机数组 不用多说,直接贴代码,php中的array_rand很变态,突破了正常人的理解,繁琐

例1

 代码如下 复制代码

function create_random_ids( $min,$max,$limited )
{
    $_base_ids = range($min,$max);
    $_temp_key = array_rand ($_base_ids,min(count($_base_ids),$limited+10));
    //拼接
    $ids = array();
    for ($x=0; $x < count($_temp_key); $x++) {
        $ids[] = $_base_ids[$_temp_key[$x]];
    }
    return $ids;
}

例2

 代码如下 复制代码

<?php
$a = array(0,1,2,3,4,5,6,7,8);
echo "$a原来的顺序为:<hr/>";
foreach($a as $v)
 echo $v."t";
shuffle($a);
echo "<br/>$a被打乱后的顺序为:<hr/>";
foreach($a as $v)
 echo $v."t";
?>

第一次得到的结果为:

php 随机打乱一个数组的排序shuffle - 九重海 - jiuchonghai-PHP的博客
 
第二次得到的结果为: 
php 随机打乱一个数组的排序shuffle - 九重海 - jiuchonghai-PHP的博客
第三次得到的结果为:
 php 随机打乱一个数组的排序shuffle - 九重海 - jiuchonghai-PHP的博客
很多朋友可能分不清楚在php中静态变量与静态方法的用法与区别在哪里,下面我来根据自己的经验来介绍静态变量与静态方法一些理解。

在PHP中,静态变量的解释是存在于类作用域的变量,在第一次初始化时给变量赋值,以后类初始化时,静态变量将不会再被重新赋值,主要用于一个类具有多个实例时的变量共享,以下为PHP的静态变量使用代码:

使用静态变量

变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。看看下面的例子:

例子 7-4. 演示需要静态变量的例子

 代码如下 复制代码
<?php
function Test ()
{
$a = 0;
echo $a;
$a++;
}
?> 

 

本函数没什么用处,因为每次调用时都会将 $a 的值设为 0 并输出 "0"。将变量加一的 $a++ 没有作用,因为一旦退出本函数则变量 $a 就不存在了。要写一个不会丢失本次计数值的计数函数,要将变量 $a 定义为静态的:
例子 7-5. 使用静态变量的例子

 代码如下 复制代码

<?php
function Test()
{
static $a = 0;
echo $a;
$a++;
}
?> 
 

现在,每次调用 Test() 函数都会输出 $a 的值并加一。

静态变量也提供了一种处理递归函数的方法。递归函数是一种调用自己的函数。写递归函数时要小心,因为可能会无穷递归下去。必须确保有充分的方法来中止递归。一下这个简单的函数递归计数到 10,使用静态变量 $count 来判断何时停止:

例子 7-6. 静态变量与递归函数

 代码如下 复制代码

<?php
function Test()
{
static $count = 0;

$count++;
echo $count;
if ($count < 10) {
Test ();
}
$count--;
}
?>

 
 

注: 静态变量可以按照上面的例子声明。如果在声明中用表达式的结果对其赋值会导致解析错误。

例子 7-7. 声明静态变量

 代码如下 复制代码

<?php
function foo(){
static $int = 0; // correct
static $int = 1+2; // wrong  (as it is an expression)
static $int = sqrt(121); // wrong  (as it is an expression too)

$int++;
echo $int;
}
?>


静态方法

 代码如下 复制代码

 
<?php
class Fruit {
 public static $category = "I'm fruit";
   
    static function find($class)
 {
     $vars = get_class_vars($class) ;
       echo $vars['category'] ;
    }
}

class Apple extends Fruit {
     public static $category = "I'm Apple";
}

Apple::find("Apple");
?>

程序运行结果:

1 I'm Apple

Program List:重写基类方法

在派生类重写基类的方法。

 代码如下 复制代码

 
<?php
class Fruit
{
 static function Foo ( $class = __CLASS__ )
    {
        call_user_func(array($class, 'Color'));
    }
}

class Apple extends Fruit
{
    static function Foo ( $class = __CLASS__ )
    {
        parent::Foo($class);
    }

    static function Color()
    {
        echo "Apple's color is red";
    }
}

Apple::Foo(); // This time it works.
?>


程序运行结果:

Apple's color is red

Program List:静态数组的使用
静态和const作用域都可以用::操作符访问,如果你想使用::操作符访问数组,你需要事先将数组声明为静态


 

 代码如下 复制代码

<?php
class Fruit
{
   static $color = array('color1' => 'red', 'color2' => 'yellow');
}

class Apple
{
   public function __construct()
   {
     var_dump(Fruit::$color);
   }
}

class Banana
{
  public function __construct()
  {
    Fruit::$color = FALSE;
  }
}

new Apple();    // prints array(2) { ["color1"]=> string(3) "red" ["color2"]=> string(6) "yellow" }
echo '<br />';
new Banana();
new Apple();    // prints bool(false)
?>

Program List:再来一个单例模式
Static真的很酷,下面的程序演示了如何获得一个已经存在的实例。

 代码如下 复制代码

   
<?php
class Singleton {

    private static $instance=null;
    private $value=null;

    private function __construct($value) {
        $this->value = $value;
    }

    public static function getInstance() {
        if ( self::$instance == null ) {
            echo "<br>new<br>";
            self::$instance = new Singleton("values");
        } 
  else {
            echo "<br>old<br>";
        }
        return self::$instance;
    }

}

$x = Singleton::getInstance();
var_dump($x); // returns the new object
$y = Singleton::getInstance();
var_dump($y); // returns the existing object
?>

静态变量与静态方法

 代码如下 复制代码

class A {
 static $i = 10;
 public function set($n)
 {
  self::$i = $n;
 }
 public function get()
 {
  return self::$i;
 }
}
$a = new A();
$a->set(11);
$a1= new A();
echo $a1->get();

输出结果为11,可以看到类A在第二次实例化后,静态变量$i依然与上一次实例化时后设定的$i值是一致的。用java来解释,其实就是一个类的静态变量在多个实例中都使用了一个内存空间,我觉得这样解释更加便于理解。因为静态变量和静态方法不需要实例化就可以使用,因而在文件被加载后静态变量就会初始化,而静态方法则会被注册。这也就可以理解,为什么java类的入口会这样的了:

 代码如下 复制代码

public static void main(String[] args)
{
}

我以前一直觉得由于静态方法不需要实例化就可以直接使用,节约了实例化的巨大开销,因而在使用一个类的方法时我更加倾向于直接静态调用而避免实例化。对于这个问题,我与同事已经争论过很多次,他不主张静态调用主要有以下想法:

1.实例化类更加符合面向对象编程的思想;
2.静态调用方法并不能在消耗上有较大的节约。
对于这个问题,我还是坚持自己的观点,但也并不是无论什么时候都使用静态调用。我主要有以下想法:
1.由于静态变量在文件被载入时就会被初始化,因此如果有多个类,并且类中存在多个静态变量与方法,势必在还未实例化时已消耗较多的内存(未验证)。所以对于访问不频繁或特殊需要,不建议将一个方法设为static;
2.对于调用较为频繁的类,我强烈建设使用static静态和静态方法,不仅可以共享内存空间,还可以共享数据。细心就会发现目前主流的PHP框架的基类都是使用的静态调用方法。

[!--infotagslink--]

相关文章

  • C#中using的三种用法

    using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using 关键字还用来创建 using 语句 定义一个范围,将在此...2020-06-25
  • pycharm实现print输出保存到txt文件

    这篇文章主要介绍了pycharm实现print输出保存到txt文件,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-02
  • iscroll.js 用法介绍

    最新版下载: http://www.csdn123.com/uploadfile/2015/0428/20150428062734485.zip 概要 iScroll 4 这个版本完全重写了iScroll这个框架的原始代码。这个项目的产生...2016-05-19
  • C++中cin的用法详细

    这篇文章主要介绍了C++中cin的用法详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • C#中的try catch finally用法分析

    这篇文章主要介绍了C#中的try catch finally用法,以实例形式分析了try catch finally针对错误处理时的不同用法,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 示例详解react中useState的用法

    useState 通过在函数组件里调用它来给组件添加一些内部 state,React 会在重复渲染时保留这个 state,接下来通过一个示例来看看怎么使用 useState吧...2021-06-04
  • 浅谈Python3中print函数的换行

    这篇文章主要介绍了浅谈Python3中print函数的换行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-05
  • PHP中print_r、var_export、var_dump用法介绍

    文章详细的介绍了关于PHP中print_r、var_export、var_dump区别比较以及这几个在php不同的应用中的用法,有需要的朋友可以参考一下 可以看出print_r跟var_export都...2016-11-25
  • php中php://input的用法详细

    在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组。所以,这里主要探讨php输入流php://input。 下面的例子摘取的是wordpres...2016-11-25
  • Delphi常用关键字用法详解

    这篇文章主要介绍了Delphi常用关键字用法,包括了各个常用的关键字及其详细用法,需要的朋友可以参考下...2020-06-30
  • MySQL中的主键以及设置其自增的用法教程

    1、声明主键的方法: 您可以在创建表的时候就为表加上主键,如: CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name)); 也可以更新表结构时为表加上主键,如: ALTER TABLE tbl_name ADD PRIMARY KEY (in...2015-11-24
  • C#中this的用法集锦

    本文给大家汇总介绍了C#中的几种this用法,相信大家应该有用过,但你用过几种?以下是个人总结的this几种用法,欢迎大家拍砖,废话少说,直接列出用法及相关代码。...2020-06-25
  • window.onerror()的用法与实例分析

    目前在做window.onerror时上报js错误信息的事,整理下相关资料,需要的朋友可以参考下...2016-01-29
  • C语言循环结构与时间函数用法实例教程

    这篇文章主要介绍了C语言循环结构与时间函数用法,是C语言中非常重要的一个技巧,需要的朋友可以参考下...2020-04-25
  • web打印 window.print()介绍

    web打印 window.print()介绍,需要的朋友可以参考一下...2020-06-25
  • php中echo <<< 的应用

    <? $a="变量的值将被带入"; echo <<< help <pre> php中echo <<< 的应用 虽然echo "...";可以断行,但若其中如出现",则仍需做转义 处理。需写做: echo " ...2016-11-25
  • 详解PyQt5中textBrowser显示print语句输出的简单方法

    这篇文章主要介绍了详解PyQt5中textBrowser显示print语句输出的简单方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-07
  • php中 ->与 ==>符号的用法与区别

    本文章来给大家介绍一下在php中 ->与 ==>符号的用法与区别,有需要了解的朋友可尝试参考。 “->”(减号、右尖括号) 用于类中,访问类里的函数或对象,比如:...2016-11-25
  • foreach()有两种用法

    foreach()有两种用法 1: foreach(array as $value) { 表达式; } 这里的array是你要遍历的数组名,每次循环中,array数组的当前元素的值被赋给$value,...2016-11-25
  • ES6学习教程之Promise用法详解

    这篇文章主要给大家介绍了关于ES6学习教程之Promise用法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-23