【问题标题】:What is the difference between these two arrays?这两个数组有什么区别?
【发布时间】:2021-12-15 04:15:24
【问题描述】:

我有一个名为“list.txt”的纯文本文件,然后使用 file() 将其内容存储在变量 $array1 中。文本文件包含以下内容:

12088
10118
10182
12525
58162
11821
17533
10118

我还声明了另一个名为 $array2 的数组变量,其内容类似:

$array2 = array(
  '12088',
  '10118',
  '10182',
  '12525',
  '58162',
  '11821',
  '17533',
  '10118'
 );

当我运行这个函数时,它什么也没有显示。

$needle = "12088";
if ( in_array($needle, $array1) ) {
 echo 'Found in array1!';
}

但是,当我将它换成 $array2 时,脚本显示“在 array2 中找到!”。

下面是脚本的样子:

$array1 = file('list.txt');
$array2 = array(
'12088',
'10118',
'10182',
'12525',
'58162',
'11821',
'17533',
'10118'
 );

$needle = "12088";
 
if ( in_array($needle, $array1) ) {
 echo 'Found in array1!';
}

if ( in_array($needle, $array2) ) {
 echo 'Found in array2!';
}

这两个数组有什么区别导致 $needle 在一个数组中找到,而不是在另一个数组中?

【问题讨论】:

  • 你有多确定第一个是数组?
  • 您是否对这些数组进行了 var_dump'ed 以查看内容?
  • 我在两个阵列上都做了一个 var_dump。由于某种原因,$array1 的每个数据值的末尾都包含一个空格。文本文件“list.txt”在每行条目的末尾不包含任何空格。

标签: php arrays file


【解决方案1】:

不同之处在于您在 list.txt 中显示了 \r\n 符号。

之前尝试使用$array1 = array_map('trim', $array1)

if ( in_array($needle, $array1) ) {
    echo 'Found in array1!';
}

【讨论】:

  • 新换行符是否转换为每个值的空格?我在执行 var_dump 时看到了这些空白。
  • 是的,我可以确认修剪就像魔术一样!谢谢和赞成。
  • 不,新行不是空格,但修剪功能也将其删除。要删除的默认字符是 $characters = " \n\r\t\v\0" 您可以在文档中阅读更多相关信息
【解决方案2】:

您需要先将文件转换为数组。你可以使用str_getcsv,像这样:

参考:str_getcsv

$file = file_get_contents('test.txt');

// Separator set as new line "\n"
$array = str_getcsv($file, "\n");
var_dump($array);

// Output
array:8 [▼
  0 => "12088"
  1 => "10118"
  2 => "10182"
  3 => "12525"
  4 => "58162"
  5 => "11821"
  6 => "17533"
  7 => "10118"
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    相关资源
    最近更新 更多