Nas operações diárias do PHP, os arrays são a estrutura mais comum, e lidamos com conteúdo relacionado a arrays quase todos os dias. Então a questão é: como você percorre e processa arrays em geral?
1、para cada um
É familiar, não é seu favorito?
$arr = ['a', 'b', 'c'];
foreach ($arr as $key => $value) {
$arr[$key] = $value . '_i';
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
2、array_map
Use funções anônimas para lidar com cada elemento do array. Um novo array é retornado quando a travessia é concluída
$arr = ['a', 'b', 'c'];
$arr = array_map(função ($item) {
retorne $item . '_i';
}, $arr);
print_r($arr); ['a_i', 'b_i', 'c_i'];
Você pode trabalhar com vários arrays ao mesmo tempo
$arr_1 = ['a', 'b', 'c'];
$arr_2 = ['você', 'bom', 'é', 'original', 'pecado'];
$arr_n = [...];
$arr = array_map(função ($item_1, $item_2) {
retorne $item_1 . '_' . $item_2. '_i';
}, $arr_1, $arr_2);
print_r($arr); ['a_ você _i', 'b_ é good_i', 'Você é c__i', '_original _i', '_sin_i']
Sim, o número de travessias é baseado no maior arranjo do array.
Após percorrer 3 vezes, $arr_1 é realmente concluído, então os valores de $item_1 ficam nulos depois disso
3、array_walk
Atravessar seu array como uma passagem de referência não tem valor de retorno e só pode processar um array.
$arr = ['a', 'b', 'c'];
array_walk($arr, função (&$item) {
$item = $item . '_i';
});
print_r($arr); ['a_i', 'b_i', 'c_i'];
Aviso $item, sim, há um extra &, o que significa que seu parâmetro está recebendo dados por referência. Tudo o que você precisa fazer é encontrar uma forma de mudar esse parâmetro.
Se você está lidando com arrays bidimensionais, o método de processamento também é inseparável.
$arr = [
['nome' => 'a'],
['nome' => 'b'],
['nome' => 'c']
];
array_walk($arr, função (&$item) {
$item['nome'] = $item['nome']. '_i';
});
print_r($arr); [['name' => 'a_i'], ['name' => 'b_i'], ['name' => 'c_i']];
4、para
Isso deveria ser uma sintaxe super genérica
$arr = ['a', 'b', 'c'];
para ($i = 0; $i < conte ($arr); ++$i) {
$arr[$i] = $arr[$i] . '_i';
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
Não recomendado. Não é tão eficiente quanto o foreach. E o método de escrita é um pouco mais complicado do que o Forreach.
5、cada
Haha, essa função foi abandonada no PHP7.2 @deprecated e parece particularmente antiquada. A eficiência de execução desse método de escrita também não é boa, e iniciantes devem desistir diretamente.
$arr = ['a', 'b', 'c'];
enquanto (list($key, $value) = each($arr)) {
$arr[$key] = $value . '_i';
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
6、reset
Para ser preciso, não é apenas uma função para resetar, mas também uma combinação de múltiplas funções embutidas, que basicamente não é usada para escrever código
$arr = ['a', 'b', 'c'];
reset() pointer para a cabeça, na verdade, o padrão é apontar para o início, você pode ignorar essa frase
reset($arr);
current() para obter o valor do elemento do ponteiro atual
enquanto ($value = atual($arr)) {
key() para obter o subíndice de elemento do ponteiro atual
$arr[chave($arr)] = $value . '_i';
Next() apontador para o próximo
próximo ($arr);
}
print_r($arr); ['a_i', 'b_i', 'c_i'];
|