第5章 数组 Array
数组是数据值的集合,按有序的“key-value”对应关系来阻止。 本章将学习如何创建,增加和删除数组元素,以及遍历数组内容。因为数组非常普遍而且有用,所以在php中有许多用于数组的内置函数。 索引数组 和 关联数组 在php中有两种数组:索引数组,关联数组
数组是数据值的集合,按有序的“key-value”对应关系来阻止。
本章将学习如何创建,增加和删除数组元素,以及遍历数组内容。因为数组非常普遍而且有用,所以在php中有许多用于数组的内置函数。
索引数组 和 关联数组
在php中有两种数组:索引数组,关联数组。
- 索引(indexed)数组的键名是整数并且是从0开始。当你需要通过位置识别元素时可以使用索引数组。
- 关联(associative)数组的键名是字符串,看起来像有两个列的数据表。第一列是用于访问键值的键名,第二列是键值value。
php内部将所有的数组都存储为关联数组,所以关联数组和索引数组的唯一区别在于key是什么。
识别数组元素
- 可以用数组变量的名字跟括在中括号中的元素健(索引)来访问数组中特定的值、
$age['Fred']
$shows[2] - 健可以是一个字符串或者一个整数。等价于整数的字符串值被当做整数对待,如:$array[3]和 $array['3']引用相同的元素,但是$array['03']引用另外的元素
- 负数是有效的健,并且他们不像在perl中那样从数组的末尾逆序的置顶位置。
- 使用引号是很好的php风格,因为没有引号的健不能和常量区别开,当你把一个常量当做无引号的索引使用时,php会把常量的值当做索引使用。
define(‘index’,5);
echo $array[index]; //检索$array[5] - 如果要在键名中使用变量替换(variable interpolation)来建立数组索引,必须使用引号(这样才能进行变量解析):
$age['Clone$number']; - 但是要通过变量替换得到某个数组元素,则键名不要使用引号:
print “hello $person['name']“; //错误
print “hellow $person[name]“;
在数组中存储数据
如果数组不存在,那么向数组存放值将创建该数组,但是在一个未定义的数组中检索值不会创建数组,如:
echo $address[0]; echo $address; $address[0] = 'dirt-life.net'; echo $address; // 输出array
下面的代码用简单的赋值来初始化程序中的一个数组:
$address[0] = '111'; $address[1] = '222'; $address[2] = '333';
下面代码建立一个关联数组
$price['gasket'] = 12; $price['weel'] = 20; $price['trie'] =50;
初始化数组的一种更容易的方法是使用array()语言结构,该结构根据它的参数来创建一个数组。下面创建了一个索引数组,索引值是自动创建的:
$array = array('d','c','e');
使用array来创建关联数组,可以使用=>符号来分割索引和值:
$price = array( 'gasket' => 12, 'wheel' => 15, 'tire' => 50 );
注意使用空白符和对齐。虽然我们也可以把代码都挤在一起,但是那样不容易阅读,
要创建一个空数组,则不传递参数给array();
$array = array();
可以使用=>来指定一个初始索引,并在后面跟着一系列键值。键值从初始健开始插入到数组中,后面的元素索引是连续的:
$days = array(1=> 'monday','tuesday','wednesday','thursday','friday','saturday','sunday');
如果初始索引是一个非数字的字符串,那么后面的索引是从0开始的整数。
在数组的末尾添加值
要把更多的值插入到一个已存在的索引数组末尾,使用[]语法:
$array = array('fred','jim'); $array[] = 'shouyan'; //$array[2] 是shouyan
这个语言结构假设该数组的索引是数字,并且把元素分配给下一个可用的数字索引,数字索引从0开始。试图添加值到一个关联数组是程序员常犯的错误,但是php会给新的索引数字索引而不发出警告:
指定值的范围
range()函数创建一个连续整数或字符的数组,整数或字符的值在传递给函数的两个参数之间。如:
$number = range(2,5); // $number = array(2,3,4,5) $letters = range('a','z'); //保存字母表到数组中 $reversed_numbers = range(5,2) //$number = array(5,4,3,2)
字符串参数中只有第一个字母被用于限定范围:
range('aaa','zzz') //和range('a','z')相同
获得数组大小
count()和sizeof()函数在用法和效果上是完全一样的,你想使用哪个函数都可以,他们返回数组中元素的个数。
$family = array('fred','wilma','pebbles'); $size = count($family);
这些函数并不根据任何可能出现的数字索引来计算元素个数.
填充数组
要用重复的内容来创建一个数组,可以使用 array_pad() 函数。array_pad() 函数的第一个参数是数组,第二个参数是你想要数组拥有的最少元素个数,第三个参数是要给每个元素的初始值。
array_pad(input, pad_size, pad_value) 返回一个填充得到的新数组,而丢弃它的参数数组,注意新值是如何添加到数组的末尾的,如果想让新值增加到数组的开头,可以把第二个参数设为负值。
$secores = array(5,10); $paded = array_pad($secores, 5, 0) //(5,10,0,0,0)
多维数组
数组中的值也可以是数组。这使你可以轻松的创建多维数组:
$row_0 = array(1,2,3); $row_1 = array(4,5,6); $multi = array($row_0,$_row_1);
可以通过添加更多的[]来引用多维数组的元素:
$value = $multi[1][0] //4
要使用变量替换来访问多维数组中的元素,必须将整个元素使用大括号扩起来:
echo('the value at row 2,colimen 0 is {$multi[1][0]\n}');
如果不适用大括号,则输出结果为 Array[0]
析取数组
要把一个数组的所有制都复制到变量中,可以使用list结构:
list($variable,…) = $array
数组的值按照数组的内部顺序被复制到列出的变量中。在默认情况下这个顺序就是他们被插入的顺序。
$person = array('F',35,'B'); list($name,$age,$wife) = $person; //$name F $age 35 $wife B
- 如果数组中的元素比 list() 中的变量多,则多余的值就被忽略;
- 如果 list() 中的值比数组中的多,则多余的值就被设为NULL;
- 在list()中使用两个或者多个连续的逗号来跳过数组中的值
切割数组
要稀缺数组的一个子集,可以使用 array_slice(array, offset, length) 函数
* 一般来说只有在索引数组上使用 array_slice(array, offset)才有意义
* 结合 list() 和 array_slice(array, offset) 析取一些值到变量中。
$order = array('t','a','ax','s'); list($second,$third) = array_slice($order, 1, 2);
数组分块 array_chunk()
$chunks = array_chunk(array;, size [, preserve_key]);
键和值(key-value);
array_keys(input) 函数根据内部顺序返回一个仅由数组中的键组成的数组:
array_values(input) 这个函数较少使用。
检查元素是否存在
要检查数组中的一个元素是否存在,使用 array_key_exists(key, array) 函数,返回一个布尔值,如果数组中存在名为key的有效键,则返 true,否则返回false。
if(array_key_exists('name', $array)){ }
或者使用 isset(var)函数代替,如果元素存在且不为NULL,则函数返回true;(p149)
在数组中删除和插入元素
array_splice(input, offset [, length [, replacement]])函数可以在数组中删除或者插入元素,并且可以用被删除的元素创建另一个数组
$removed = array_splice(input, offset [, length [, replacement]]);
$subjects = array('a','b','c','d','e','f','g');
* 我们可以告诉array_splice()从位置2开始删除3个元素,这样可以删除c,d,e三个元素,如果省略 length参数,则会删除到数组末尾:
$removed = array_splice($subjects, 2, 3)
* 要在元素被删除的位置插入元素,应该使用第四个参数,替换数组的个数不需要和被删除元素的数组相同。数组可以按需要增长或收缩:
$new = array(‘x’,'y’);
array_splice($subjects, 4, 3, $new);
* 想得到把新元素插入到数组的效果,要把已存在的元素推到右边,删除0个元素:
$new = array(‘x’,'y’);
array_splice($subjects, 4, 0, $new);
* array_splice()函数也可以用于关联数组
在数组和变量间转换 extract() compact()
- 从数组中创建变量
$person = array(‘name’=>’fred’,'age’=>35,’wife’=>’betty’);
extract($person); //将数组转换为变量
extract($person,EXTR_PREFIX_ALL,’wp’); // $wp_name fred , $wp_age 35, $wp_wife - 从变量中创建数组
$color = ‘red’;
$shape = ‘clcile’;
$float = ‘none’;$a = compact(‘color’,'shape’,'float’);
遍历数组
php中有几种方法来遍历数组,选择使用哪一种取决于你的数据和要执行的任务。
遍历数组元素最常用的方法是使用 foreach 结构:
访问当前元素的值
$array = array('a','b','c'); foreach ($array as $value) { echo "Print $value\n"; }
访问当前元素的键名
$array = array('a' => 1,'b' => 2, 'c' => 3 ); foreach ($array as $key => $value) { echo "print $key is $value\n" }
迭代器函数
每个php数组都会跟中当前所处理的元素;指向当前元素的指针被称为迭代器(iterator)。php有一些函数来设置、移动和重置迭代器。迭代器函数有:
- current(array) 返回迭代器当前指向的元素
- reset(array) 移动迭代器到数组的第一个元素并返回该元素
- next(array) 移动迭代器到数组的下一个元素并返回该元素
- prev(array) 移动迭代器到数组的上一个元素并返回该元素
- end(array) 移动迭代器到数组的最后一个元素并返回该元素
- each(array) 以数组的形式返回当前元素的见和值,并移动迭代器到数组的下一个元素
- key(array) 返回当前元素的健
each(array) 函数用来遍历数组元素,该函数根据元素的内部顺序来处理元素,这种方法不会像foreach那样产生一个数组拷贝,处理大数组时如果希望节约内存,这种方法是很有用的:
reset($address);
while(list($key,$value)) = each($address)){
echo “$key is $value\n”;
}
当需要把数组的一部分分离出来的时候,迭代器函数是很有用的。下面代码创建一个表格,并把管理数组的第一个索引和值作为表格的列标题:
$ages = array( 'person'=>'age' 'Fred' => 35, 'Barney' => 30, 'Tigger' => 8, 'Pooh' =>40 ); reset($ages); list($c1,$c2) = each($pages); while (list($c1,$c2) = each($ages)) { echo("$c1 $c2") }
使用for循环
$arr = array('a','b','c'); for($i = 0; $i <h2 id="为数组的每个元素调用函数">为数组的每个元素调用函数</h2> <p>php提供了一函数 array_walk(array, funcname),用于为数组中每个元素调用用户自定义函数,自动以的函数接收2个或者三个参数:<br> * 第一个参数是元素的值<br> * 第二个参数是元素的健<br> * 第三个参数是该函数被 array_walk() 调用时使用的值</p> <pre class="brush:php;toolbar:false">function print_now($value, $key, $color){ print("$value $key $color\n"); } array_walk($arr, 'print_now','red');
数组归纳
array_walk()的近似函数 array_reduce(input, function),将一个函数依次应用于数组的每个元素来得到单个值??? ( P55 )
查找元素值
in_array()函数返回true或者false,取决于第一个参数是否是第二个参数指定的数组元素:
$arrdress = array(‘a’,'b’,'c’);
$got_a = in_array(‘a’, $arrdress) //true
$got_d = in_array(‘d’, $arrdress) //false
php 自动索引数组的值,所以 in_array() 比使用循环检查数组的每个值来寻找一个值要快得多
in_array() 的一个变种是 array_search(to_find, array),如果值被找到,in_array() 返回true,而 array_search() 返回找到元素的健:
$person = array('name'=>'fred','age'=>35,'wife'=>'willma'); $k = array_search($person, 'willma'); echo("$key");
数组的排序
排序该表了数组中元素的内部顺序并可以重写元素键名来反映新顺序。例如,可以使用排序来按从大到小排列一个的分清单,按字母排列一个名字清单或根据用户提交的消息来排列一组用户。
php提供三种对数组排序的方法(其中每种排序方式都可以按照升序,降序或用户定义函数的顺序排序):
* 按键排序,
* 不该变键的按值排序
* 按值排序并改变键
一次排序一个数组
- 按值排序,然后从0开始重新分配索引 sort() rsort() usort()
- 按值排序 asort() arsort() uasort()
- 按键排序, ksort() krsort() uksort()
$names = array(‘c’,'d’,'a’,'b’);
sort($names) //a,b,c,d$numbers = array(2,1,3);
asort($numbers) //1,2,3$keys = array(‘c’=>3,’a'=>1,’b'=>2);
ksort($keys) - array_reverse(array) //反转
- array_flip(trans) //键值互换
- shuffle(array) //随机排序
作用于整个数组
- array_sum(array)
- array_merge(array1) 合并多个数组
- array_diff(array1, array2) 比较两个或者多个数组数组
从数组中过滤元素
array_filter(array,callback)
function is_odd($element){ return $element % 2; } $numbers = array(9,23,24,27); $odds = array_filter($numbers,'is_odd');
集合
- array_unique(array) 求数组的交集
堆栈
- array_push(array, var)
- array_pop(array)
- array_unshift(array, var)
- array_shift(array)
原文地址:第5章 数组 Array, 感谢原作者分享。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds



Vous êtes confronté à un décalage et à une connexion de données mobile lente sur iPhone ? En règle générale, la puissance de l'Internet cellulaire sur votre téléphone dépend de plusieurs facteurs tels que la région, le type de réseau cellulaire, le type d'itinérance, etc. Vous pouvez prendre certaines mesures pour obtenir une connexion Internet cellulaire plus rapide et plus fiable. Correctif 1 – Forcer le redémarrage de l'iPhone Parfois, le redémarrage forcé de votre appareil réinitialise simplement beaucoup de choses, y compris la connexion cellulaire. Étape 1 – Appuyez simplement une fois sur la touche d’augmentation du volume et relâchez-la. Ensuite, appuyez sur la touche de réduction du volume et relâchez-la à nouveau. Étape 2 – La partie suivante du processus consiste à maintenir le bouton sur le côté droit. Laissez l'iPhone finir de redémarrer. Activez les données cellulaires et vérifiez la vitesse du réseau. Vérifiez à nouveau Correctif 2 – Changer le mode de données Bien que la 5G offre de meilleures vitesses de réseau, elle fonctionne mieux lorsque le signal est plus faible

Je pleure à mort. Le monde construit à la folie de grands modèles. Les données sur Internet ne suffisent pas du tout. Le modèle de formation ressemble à « The Hunger Games », et les chercheurs en IA du monde entier se demandent comment nourrir ces personnes avides de données. Ce problème est particulièrement important dans les tâches multimodales. À une époque où rien ne pouvait être fait, une équipe de start-up du département de l'Université Renmin de Chine a utilisé son propre nouveau modèle pour devenir la première en Chine à faire de « l'auto-alimentation des données générées par le modèle » une réalité. De plus, il s’agit d’une approche à deux volets, du côté compréhension et du côté génération, les deux côtés peuvent générer de nouvelles données multimodales de haute qualité et fournir un retour de données au modèle lui-même. Qu'est-ce qu'un modèle ? Awaker 1.0, un grand modèle multimodal qui vient d'apparaître sur le Forum Zhongguancun. Qui est l'équipe ? Moteur Sophon. Fondé par Gao Yizhao, doctorant à la Hillhouse School of Artificial Intelligence de l’Université Renmin.

Récemment, le milieu militaire a été submergé par la nouvelle : les avions de combat militaires américains peuvent désormais mener des combats aériens entièrement automatiques grâce à l'IA. Oui, tout récemment, l’avion de combat IA de l’armée américaine a été rendu public pour la première fois, dévoilant ainsi son mystère. Le nom complet de ce chasseur est Variable Stability Simulator Test Aircraft (VISTA). Il a été personnellement piloté par le secrétaire de l'US Air Force pour simuler une bataille aérienne en tête-à-tête. Le 2 mai, le secrétaire de l'US Air Force, Frank Kendall, a décollé à bord d'un X-62AVISTA à la base aérienne d'Edwards. Notez que pendant le vol d'une heure, toutes les actions de vol ont été effectuées de manière autonome par l'IA ! Kendall a déclaré : "Au cours des dernières décennies, nous avons réfléchi au potentiel illimité du combat air-air autonome, mais cela a toujours semblé hors de portée." Mais maintenant,

La dernière vidéo du robot Optimus de Tesla est sortie, et il peut déjà fonctionner en usine. À vitesse normale, il trie les batteries (les batteries 4680 de Tesla) comme ceci : Le responsable a également publié à quoi cela ressemble à une vitesse 20 fois supérieure - sur un petit "poste de travail", en sélectionnant et en sélectionnant et en sélectionnant : Cette fois, il est publié L'un des points forts de la vidéo est qu'Optimus réalise ce travail en usine, de manière totalement autonome, sans intervention humaine tout au long du processus. Et du point de vue d'Optimus, il peut également récupérer et placer la batterie tordue, en se concentrant sur la correction automatique des erreurs : concernant la main d'Optimus, le scientifique de NVIDIA Jim Fan a donné une évaluation élevée : la main d'Optimus est l'un des robots à cinq doigts du monde. le plus adroit. Ses mains ne sont pas seulement tactiles

Le FP8 et la précision de quantification inférieure en virgule flottante ne sont plus le « brevet » du H100 ! Lao Huang voulait que tout le monde utilise INT8/INT4, et l'équipe Microsoft DeepSpeed a commencé à exécuter FP6 sur A100 sans le soutien officiel de NVIDIA. Les résultats des tests montrent que la quantification FP6 de la nouvelle méthode TC-FPx sur A100 est proche ou parfois plus rapide que celle de INT4, et a une précision supérieure à celle de cette dernière. En plus de cela, il existe également une prise en charge de bout en bout des grands modèles, qui ont été open source et intégrés dans des cadres d'inférence d'apprentissage profond tels que DeepSpeed. Ce résultat a également un effet immédiat sur l'accélération des grands modèles : dans ce cadre, en utilisant une seule carte pour exécuter Llama, le débit est 2,65 fois supérieur à celui des cartes doubles. un

La comparaison des performances des méthodes de retournement des valeurs de clé de tableau PHP montre que la fonction array_flip() fonctionne mieux que la boucle for dans les grands tableaux (plus d'un million d'éléments) et prend moins de temps. La méthode de la boucle for consistant à retourner manuellement les valeurs clés prend un temps relativement long.

" sept péchés capitaux" » Dissiper les rumeurs : selon des informations divulguées et des documents obtenus par Vox, la haute direction d'OpenAI, y compris Altman, était bien au courant de ces dispositions de récupération de capitaux propres et les a approuvées. De plus, OpenAI est confronté à un problème grave et urgent : la sécurité de l’IA. Les récents départs de cinq employés liés à la sécurité, dont deux de ses employés les plus en vue, et la dissolution de l'équipe « Super Alignment » ont une nouvelle fois mis les enjeux de sécurité d'OpenAI sur le devant de la scène. Le magazine Fortune a rapporté qu'OpenA

Les méthodes de copie approfondie de tableaux en PHP incluent : l'encodage et le décodage JSON à l'aide de json_decode et json_encode. Utilisez array_map et clone pour créer des copies complètes des clés et des valeurs. Utilisez Serialize et Unsérialize pour la sérialisation et la désérialisation.
