【问题标题】:PHP Array delete an entire array by one element valuePHP Array 按一个元素值删除整个数组
【发布时间】:2022-01-13 13:11:55
【问题描述】:

这就是我的数组 ($dataArray) 的样子:

Array 
( 
 [0] => Array 
   ( 
   [0] => Date 
   [1] => Time 
   [2] => Duration 
   [3] => Info 
   [4] => Client
   )
 [1] => Array 
   ( 
   [0] => 2021-12-01 
   [1] => 10:45:43 
   [2] => 237 
   [3] => Some text from  
   [4] => Client 1 
   ) 
 [2] => Array 
   ( 
   [0] => 2021-12-01 
   [1] => 11:29:13 
   [2] => 77 
   [3] => Nothing important 
   [4] => Client 2 
   ) 
 [3] => Array 
   ( 
   [0] => 2021-12-01 
   [1] => 11:53:03 
   [2] => 44 
   [3] => anonymous 
   [4] => Client 1 
   )

我需要循环遍历它来搜索客户端名称,如果我在元素 4 中找到匹配的名称,则删除整个数组。

$ExportKDname = "Client 1"
foreach($dataArray as $key => $sub_array) {
    if($sub_array[4] == $ExportKDname) {
        unset($dataArray[$key]);
        break; 
    }
}
  
  print_r($dataArray);

但是使用此代码不会删除任何数组。而我就是找不到正确的方法。

如果我们在数组中找到“客户端 1”,我需要的最终数组如下所示:

Array 
( 
 [0] => Array 
   ( 
   [0] => Date 
   [1] => Time 
   [2] => Duration 
   [3] => Info 
   [4] => Client
   )
 [1] => Array 
   ( 
   [0] => 2021-12-01 
   [1] => 11:29:13 
   [2] => 77 
   [3] => Nothing important 
   [4] => Client 2 
   ) 

【问题讨论】:

  • 该代码应该可以正常工作,实际上可以。它当然只会删除它找到的第一次出现
  • 您的 exportKDname 变量缺少分号。然而我的猜测是你的名字中有空格,因为 Riggs 是正确的,代码通常可以正常工作。修剪您的子字段和您的 exportDKname 变量。
  • 首先,为什么要放break 如果需要删除2个元素?
  • 删除中断,还要确保 $sub_array[4] 不包含任何额外的空格,你可以这样做if (trim($sub_array[4]) == $ExportKdName)
  • Demo of code working, your code 或评论break; 以删除所有出现的Client 1

标签: php arrays


【解决方案1】:

在 if 条件中,你说“如果你匹配 $sub_arr[4] == $ExportKDname 取消设置并停止循环”。这样做的机器。当它第一次匹配时,它会移除并停止。如果您想删除所有匹配项,请不要写break; 让它继续。所以删除或将其注释为break; 行。

【讨论】:

    【解决方案2】:

    您可以array_filter您的变量并检查值是否为in_array

    使用 PHP 7.4+ 的语法应该如下所示:

    $result = array_filter($dataArray, fn ($innerArray) => !in_array('Client 1', $innerArray));
    

    【讨论】:

    • 箭头函数在 PHP 7.4 中引入
    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 2021-11-13
    • 2013-05-05
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多