首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么array_diff()给出数组到字符串的转换错误?

为什么array_diff()给出数组到字符串的转换错误?
EN

Stack Overflow用户
提问于 2013-11-07 07:55:47
回答 10查看 47.6K关注 0票数 69

我得到以下代码行的数组到字符串的转换错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$diff = array_diff($stockist, $arr);

这里,$arr是从JSON文件解码的数组。使用is_array()函数,我能够验证这两个参数都是数组。有人能给我指出问题所在吗

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$stockist = array();
while (!feof($file_handle)) {

    $line_of_text = fgetcsv($file_handle);
    $query = "SELECT * FROM reorderchart WHERE medicine = '"
        . trim($line_of_text[3])
        . "' ORDER BY medicine";
    $result = mysql_query($query);

    if (trim($line_of_text[2]) - trim($line_of_text[1]) <= 0) {

        while ($row = mysql_fetch_array($result)) {

            $file = "results.json";
            $arr = json_decode(file_get_contents($file),true);
            $pharmacy = trim($row['Medicine']);

            if (isset($stockist[$pharmacy])) {

                $medicine = $stockist[$pharmacy];
                $medicine[] = trim($row['Stockist']);
                $stockist[$pharmacy] = $medicine;

            } else {

                $medicine = array();
                $medicine[] = trim($row['Stockist']);
                $stockist[$pharmacy] = $medicine;
            }
        }
    }
}
$diff = array();
$diff = array_diff_assoc($stockist,$arr);
ksort($diff);
foreach ($diff as $key => $value) {

    echo "<table align='center' border='1'>";
    echo "<tr><td align = 'center'> <font color = 'blue'> $key</td></tr>";

    foreach($value as $key1 => $value1) {

        echo "<tr><td align ='center'>$value1</td></tr><br>";
    }
    echo "</table>";
}
EN

回答 10

Stack Overflow用户

发布于 2013-11-07 08:09:37

根据它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
php -r 'array_diff(array("a" => array("b" => 4)), array(1));'
PHP Notice:  Array to string conversion in Command line code on line 1
PHP Stack trace:
PHP   1. {main}() Command line code:0
PHP   2. array_diff() Command line code:1

您的其中一个数组是多维的。

array_diff只检查n维数组的一维。当然,您可以使用array_diff($array1[0], $array2[0]);检查更深层次的维度

票数 47
EN

Stack Overflow用户

发布于 2015-08-14 12:39:24

是的,严格的答案是因为“你的一个数组是多维的”。

另一个有用的注意事项可能是-根据您进一步解析实际差异的需要-考虑首先使用以下命令测试您的阵列:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$diff = strcmp(json_encode($stockist), json_encode($arr));

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$diff = strspn(json_encode($stockist) ^ json_encode($arr), "\0");

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$diff = xdiff_string_diff(json_encode($stockist), json_encode($arr));

所有这些选项都将比较整个数组树,而不仅仅是顶层。

票数 26
EN

Stack Overflow用户

发布于 2015-12-16 14:58:50

由于array_diff只能处理一个维度,因此您可以:

  • 将多维数组转换为一维,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- [flattening a multidimensional array](https://stackoverflow.com/q/1319903/55075), e.g.:

while ( $arr ) { list($key,$value) = each( $arr );is_array( $value )?$arr=$value:$out$key = $value;} //现在$out是$arr的扁平版。

- serializing the array,例如:

$results = array_diff(array_map('serialize',$a2),array_map('serialize',$a1));

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19830585

复制
相关文章
用C#实现模拟双色球中奖控制台应用程序
简单地运用CSharp语言和.net平台,如变量、方法、类、数组、字典、系统函数、规范的注释、控制台输出、文件的读写、程序怎样设计等。
摘繁华
2022/08/31
1.2K0
用C#实现模拟双色球中奖控制台应用程序
用C#实现模拟双色球中奖控制台应用程序
简单地运用CSharp语言和.net平台,如变量、方法、类、数组、字典、系统函数、规范的注释、控制台输出、文件的读写、程序怎样设计等。
摘繁华
2022/05/03
1.4K0
用C#实现模拟双色球中奖控制台应用程序
C# 控制台应用程序输出颜色字体[更正版]
首先感谢院子里的“yanxinchen”,之前的方法是通过c#调用系统api实现的,相比之下我的有点画蛇添足了,哈哈。 最佳解决方案的代码: static void Main(string[] args) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Hello, color text!"); Console.ForegroundColor = ConsoleColor.Red; Cons
磊哥
2018/05/09
2K0
C# 控制台应用程序输出颜色字体[更正版]
使用C#创建SQLite控制台应用程序
本文介绍了如何使用C#和SQLite数据库来创建一个简单的登录系统,并给出了具体的代码示例。主要实现了用户登录、注册、修改个人信息和查询个人信息等功能。使用了SQLiteStudio工具来创建数据库,并使用了System.Data.SQLite.dll库进行数据库操作。
CNXY
2017/12/25
2.5K0
使用C#创建SQLite控制台应用程序
使用C#创建WCF服务控制台应用程序
本文介绍如何使用C#创建WCF服务控制台应用程序。首先,作者演示了如何将WCF服务添加到现有的Visual Studio 2019项目。然后,他演示了如何编写服务合同,并添加数据契约。最后,他演示了如何将控制台应用程序与WCF服务连接,并调用服务的方法。
CNXY
2017/12/25
2.1K0
使用C#创建WCF服务控制台应用程序
CSharp实现模拟双色球控制台应用程序
这是我在大一第一学期C#的课程设计,要求编写一个模拟双色球彩票的控制台应用程序,用以实现简单的模拟选购彩票。
摘繁华
2021/12/27
1.6K0
CSharp实现模拟双色球控制台应用程序
「业务架构」如何在BPMN中正确使用泳道
池是设置业务流程边界的基本BPMN元素。池最多包含一个业务流程。这意味着两个流程程必须在两个不同的池中建模。池可以以将要执行的流程的形式具有可见的内部详细信息(称为“白盒池”),或者池可能没有可见的内部详细信息(称为“黑盒池”)。应该使用的池类型取决于所需的详细程度和特定的上下文。
架构师研究会
2020/07/20
2.2K0
「业务架构」如何在BPMN中正确使用泳道
[C#]实现任何数据库类型的DbHelper帮助类 使用C#创建SQLite控制台应用程序
我们可以看到,在此类中,有很多用于创建数据库相关对象的类型,如DbConnection,DbCommand,DbDataAdapter等。
CNXY
2019/05/24
4.2K0
聊聊如何在spring事务中正确进行远程调用
最近和朋友聊天,他说他承接的外包项目遇到了分布式事务问题,问我有没啥解决方案,我本可以直接跟他说,分布式事务方案网上一大堆,什么tcc、可靠消息一致性、最大努力通知之类的,直接网上找个试下,比如直接用阿里的seata。但我并没有这么做,因为分布式事务,本来就是一个很复杂的课题,真正落地的时候,会发现有时候是多种分布式方案一起混用,而非一种方案走到黑。
lyb-geek
2022/01/07
7110
如何在Laravel 5中正确设置文件权限
为任何Web应用程序设置适当的文件权限是Web托管的重要部分。 在本教程中,您将学习如何在Linux Web服务器上托管的Laravel应用程序上正确配置文件权限。
星哥玩云
2022/07/27
5.7K0
如何在Pytorch中正确设计并加载数据集
但在实际的训练过程中,如何正确编写、使用加载数据集的代码同样是不可缺少的一环,在不同的任务中不同数据格式的任务中,加载数据的代码难免会有差别。为了避免重复编写并且避免一些与算法无关的错误,我们有必要讨论一下如何正确加载数据集。
老潘
2023/10/19
3990
如何在Pytorch中正确设计并加载数据集
聊聊如何在spring事务中正确进行远程调用
最近和朋友聊天,他说他承接的外包项目遇到了分布式事务问题,问我有没啥解决方案,我本可以直接跟他说,分布式事务方案网上一大堆,什么tcc、可靠消息一致性、最大努力通知之类的,直接网上找个试下,比如直接用阿里的seata。但我并没有这么做,因为分布式事务,本来就是一个很复杂的课题,真正落地的时候,会发现有时候是多种分布式方案一起混用,而非一种方案走到黑。
lyb-geek
2021/04/29
1K0
聊聊如何在spring事务中正确进行远程调用
[C#] 控制台应用程序退出事件
在 .NET 中,是否有一种方法(例如事件)来检测控制台应用程序何时退出?你可能需要清理一些线程和 COM 对象.,记录一下信息等等。。。。。。。 比如我的数据采集软件,每次启动和退出时向钉钉推送相关
科控物联
2022/04/19
2.9K0
[C#] 控制台应用程序退出事件
如何在 Node.js 中正确的使用日志对象
日志,是开发者排查问题的非常重要的手段,有时候甚至是唯一的,所以如何合理并正确的打印日志,成了开发时的重中之重。
程序狗
2022/01/04
1.1K0
如何在 JS 循环中正确使用 async 与 await
你想从fruitBasket获得每个水果的数量。 要获取水果的数量,可以使用getNumFruit函数。
前端小智@大迁世界
2019/06/15
5K0
如何在网页设计中正确应用色彩?
以下内容由摹客团队翻译整理,仅供学习交流,摹客iDoc是支持智能标注和切图的产品协作设计神器。
奔跑的小鹿
2019/06/24
1.2K0
如何在 JS 循环中正确使用 async 与 await
async 与 await 的使用方式相对简单。 当你尝试在循环中使用await时,事情就会变得复杂一些。
桃翁
2019/06/18
4.6K0
如何在 JS 循环中正确使用 async 与 await
如何在 Node.js 中正确的使用日志对象
地址:https://mp.weixin.qq.com/s/Pb51aYdrxAALM_wR4asDgg
coder_koala
2021/08/26
9840
C# 控制台使用 UAC 权限
本文告诉大家如何在 C# 控制台项目使用 UAC 权限。这个方法在 WPF 和 控制台都是可以使用。
林德熙
2018/09/19
1.5K0
C# 控制台使用 UAC 权限
如何在 Linux 上锁定虚拟控制台会话 如何在 Linux 上锁定虚拟控制台会话
当你在共享的系统上工作时,你可能不希望其他用户偷窥你的控制台中看你在做什么。如果是这样,我知道有个简单的技巧来锁定自己的会话,同时仍然允许其他用户在其他虚拟控制台上使用该系统。要感谢 Vlock(Virtual Console lock),这是一个命令行程序,用于锁定 Linux 控制台上的一个或多个会话。如有必要,你可以锁定整个控制台并完全禁用虚拟控制台切换功能。Vlock 对于有多个用户访问控制台的共享 Linux 系统特别有用。
用户8639654
2021/10/26
2.2K0

相似问题

如何在libgdx中正确地实现声音切换?

14

我如何实现声音通知,如whatsapp?

13

如何在C#中正确退出/停止/处置控制台应用程序

31

如何在c#控制台应用程序中正确处理异常

11

如何在C#控制台应用程序中正确写出下载状态?

42
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文