美文网首页PHP7编什么程
php面试基础知识--数组函数(一)

php面试基础知识--数组函数(一)

作者: 沙蒿同学 | 来源:发表于2019-05-18 08:47 被阅读1次
  • array_merge() : array

将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。

如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。

如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

注意:其中一个数组为null,返回的值也为null(曾经被自己坑过)

<?php
  $array1 = array("color" => "red", 2, 4);
  $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
  $array3 = null;
  $result = array_merge($array1, $array2);
  print_r($result);
  • array_push() : int

array_push() 将 array 当成一个栈,并将传入的变量压入 array 的末尾。array 的长度将根据入栈变量的数目增加。和如下效果相同:

<?php
  $array[] = $var;

注意:
1、这个函数建议大家少用吧,还不如直接用 $array[] = ,因为这样没有调用函数的额外负担;
2、另外,如果第一个参数不是数组,array_push() 将发出一条警告(自己也被坑过)
3、记得函数返回的是元素的个数(int),而不是数组

  • array_pop() : mixed

弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一

<?php
    $array = [
        'a' =>  '1',
        'b' =>  '2',
        'c' =>  '3'
    ];
    $count = array_push($array, array('123'));  
    echo $count;  // 返回值为4
    var_dump($array);  //array('a' =>  '1','b' =>  '2','c' =>  '3', 0 => array('123'))
    $pop_array = array_pop($array);  //array(1) {[0]=>string(3) "123"}
    var_dump($pop_array);
    var_dump($array);
  • array_search() :mixed

在数组中搜索给定的值,如果成功则返回首个相应的键名。俗称:“大海捞针”。
底层的代码其实就是循环遍历,实现的时间复杂度O(n²),这个时间复杂度大家是懂的(恐怖)。以下是部分代码:(我也不知道为什么要粘贴上去,可能显得牛逼吧)

static inline void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior) /* {{{ */
{
    if (strict) {
        ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_idx, str_idx, entry) {
            ……
        } ZEND_HASH_FOREACH_END();
    } else {
        if (Z_TYPE_P(value) == IS_LONG) {
            ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_idx, str_idx, entry) {
                ……
            } ZEND_HASH_FOREACH_END();
        } else if (Z_TYPE_P(value) == IS_STRING) {
            ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_idx, str_idx, entry) {
                ……
            } ZEND_HASH_FOREACH_END();
        } else {
            ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_idx, str_idx, entry) {
                ……
            } ZEND_HASH_FOREACH_END();
         }
    }
    RETURN_FALSE;
}

这里是简单的示例

<?php
  $array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');

  $key = array_search('green', $array); // $key = 2;
  $key = array_search('red', $array);   // $key = 1;
?>

注意:很多新人滥用了这个函数,其实就想大海捞针一样,循环遍历。该函数在某些场景下效率是很低的。这里有一篇文章有详细的介绍与数据证明,建议大家看看:慎用php的array_search函数--作者:安木1991)

相关文章

网友评论

    本文标题:php面试基础知识--数组函数(一)

    本文链接:https://www.haomeiwen.com/subject/iataaqtx.html