我在构造数组时遇到问题,它在 PHP 8.1 中产生此错误: 警告:尝试访问 C:\xampp\htdocs\sito3\xlsx.php 第 250 行中 bool 类型值的数组偏移量 我消除了警告,但我想了解如何彻底消除它: 这是我的职能:
function divide_name_surname(string $stringa): array
{
if (str_word_count($stringa, 1) === 2) {
// only one separator " "
return trim(explode(" ", $stringa));
} else {
// more than one separator
return [
trim(substr($stringa, 0, strrpos($stringa, " "))),
trim(substr($stringa, strrpos($stringa, " "))),
];
}
}
还有另一个功能:
function csvToArray($csvFile,$separatore){
$file_to_read = fopen($csvFile, 'r');
while (!feof($file_to_read) ) {
$lines[] = fgetcsv($file_to_read, 1000, $separatore);
}
fclose($file_to_read);
return $lines;
}
我正在尝试从带有分隔符“,”的 .csv 文件构建一个数组
$arr_csv = csvToArray($nome_file_csv,',');
for($c=0; $c< count($arr_csv ); $c++){
//this line creates the warning
$nome_cognome_parts = @divide_name_surname( ($arr_csv[$c][0] !== null) ? $arr_csv[$c][0] : "" );
$nome = $nome_cognome_parts[0];
$cognome = $nome_cognome_parts[1];
// build final array
$array_finale[$c][0] = "";
$array_finale[$c][1] = "";
$array_finale[$c][2] = @$arr_csv[$c][2]; //this line creates the warning
$array_finale[$c][3] = @$arr_csv[$c][3]; //this line creates the warning
$array_finale[$c][4] = @$arr_csv[$c][0]; //this line creates the warning
$array_finale[$c][5] = "";
$array_finale[$c][6] = @$arr_csv[$c][1]; //this line creates the warning
$array_finale[$c][7] = "";
$array_finale[$c][8] = $nome;
$array_finale[$c][9] = $cognome;
$array_finale[$c][10] = $progressivo;
$array_finale[$c][11] = date("d-m-Y H:i:s");
$progressivo++;
}
如何在不隐藏警告的情况下解决问题?
我想我通过向函数提交 $arr_csv 解决了问题:
function eliminaArrayNested(array $array, int $indice1, int $indice2) {
// Se l'indice non è valido, ritorna l'array originale
if ($indice1 < 0 || $indice1 >= count($array) || $indice2 < 0 || $indice2 >= count($array)) {
return $array;
}
// Crea un nuovo array senza gli array nested da eliminare
$arrayNuovo = array();
for ($n = 0; $n < count($array); $n++) {
if ($n != $indice1 && $n != $indice2) {
$arrayNuovo[] = $array[$n];
}
}
// Restituisce il nuovo array
return $arrayNuovo;
}
和
function remove_last_element_multidim_arr($array) {
$array_length = count($array);
if ($array_length > 0) {
array_pop($array);
}
return $array;
}
新代码:
$arr_csv = csvToArray($nome_file_csv,',');
$arr_csv = eliminaArrayNested(remove_last_element_multidim_arr($arr_csv),0,1);
for($c=0; $c< count($arr_csv ); $c++){
nome_cognome_parts = separa_nome_cognome(
($arr_csv[$c][0] !== null) ? $arr_csv[$c][0] : "" );
$nome = $nome_cognome_parts[0];
$cognome = $nome_cognome_parts[1];
$array_finale[$c][0] = "";
$array_finale[$c][1] = "";
$array_finale[$c][2] = $arr_csv[$c][2];
$array_finale[$c][3] = $arr_csv[$c][3];
$array_finale[$c][4] = $arr_csv[$c][0];
$array_finale[$c][5] = "";
$array_finale[$c][6] = $arr_csv[$c][1];
$array_finale[$c][7] = "";
$array_finale[$c][8] = $nome;
$array_finale[$c][9] = $cognome;
$array_finale[$c][10] = $progressivo;
$array_finale[$c][11] = date("d-m-Y H:i:s");
$progressivo++;
}
str_word_count($stringa, 1) - 返回一个数组,str_word_count($stringa, 1) === 2 始终返回 bool(false)。要计算数组元素的数量,请使用 array_count_values()。