【问题标题】:Remove the whole array elements, where array element key count < 2 in PHP删除整个数组元素,其中数组元素键计数 < 2 在 PHP
【发布时间】:2021-11-13 01:07:27
【问题描述】:

下面是我输出这个数组的代码:

 // update users
$where_in = array('1102','');
$admin_data = $this->db->select('id,email,domain')->where_in('id',$where_in)->get('users')->result();

echo "<pre>";print_r($admin_data);

当前输出数组

1102,
Array
(
    [0] => stdClass Object
        (
            [id] => 1
        )

)
1111, 
Array
(
    [0] => stdClass Object
        (
            [id] => 1132
        )

    [1] => stdClass Object
        (
            [id] => 1133
        )

)

我试图通过这样做来完成,但没有得到预期的结果。

foreach ($admin_data as $key) {

    if (count($admin_data) < 2) {
        unset($admin_data);
    }
}

预期结果:我想删除整个数组元素,其中数组键小于 2。我希望只获得键数大于 1 的数组,如下所示:

1111, 
    Array
    (
        [0] => stdClass Object
            (
                [id] => 1132
            )
    
        [1] => stdClass Object
            (
                [id] => 1133
            )
    
    )

【问题讨论】:

    标签: php arrays codeigniter


    【解决方案1】:

    我相信您正在尝试取消设置“$admin_data”数组中的元素,但是您在数组本身上调用unset。如果将数组元素的索引与元素本身一起传递到循环中,则可以检查元素是否少于两个内部元素,并相应地取消设置该元素。

    $elementsToRemove = [];
    foreach($admin_data as $index => $key) {
        if (count($key) < 2) {
            $elementsToRemove[] = $index;
        }
    }
    
    $newArray = array_diff_key($admin_data, array_flip($elementsToRemove));
    

    【讨论】:

      【解决方案2】:

      我不确定我是否理解,但是如果您有一个数组数组并且想要删除少于 2 个元素的内部数组,您可以这样做:

      <?php
      
      $original = [
          ["a"],
          ["b", "c"],
      ];
      
      $filtered = array_filter(
          $original,
          function ($innerArray) {
              return count($innerArray) >= 2;
          }
      );
      
      print_r($filtered);
      

      结果是

      Array
      (
          [1] => Array
              (
                  [0] => b
                  [1] => c
              )
      
      )
      

      PHP Fiddle

      【讨论】:

      • 我试过了,但是现在所有数组都变空了 -> 1102,Array ( ) 1111,Array ( ) 应该返回 1111 id 数据
      • 它不工作,你能重新检查一下吗?
      • 我的数据不一样看起来像这样 -> $original = [["a"]]; $原始 = [["b"],["c"]];不是一个数组被拆分成多个单独的数组
      【解决方案3】:

      再次检查您的代码,它包含一些逻辑问题:

      foreach ($admin_data as $key) {
          if (count($admin_data) < 2) {
              unset($admin_data);
          }
      }
      

      如果$admin_data 有一项,则if (count($admin_data) &lt; 2) 测试为真,
      unset($admin_data); 被执行。这意味着(简化)$admin_data 的所有内容都被删除。
      如果$admin_data 有两个或更多项目,则if (count($admin_data) &lt; 2) 测试永远不会为真。每次迭代都是如此。
      这两种情况都不合逻辑,因为您不需要foreach 循环来进行此测试。此外,您可能不想删除$admin_data 的内容。

      您需要做的是遍历$admin_data 项,检查该项以查看它是否是一个数组,如果该数组有一项,则从$admin_data 数组中删除该项。或者您可以仅使用有效项目创建另一个数组。

      以下是两者的可能示例:

      /* unset the item if it is an array with one item */
      foreach ($admin_data as $key => $value) {
          if (is_array($value) && count($value) === 1) {
              unset($admin_data[$key]);
          }
      }
      
      /* create a new array with the valid items */
      $valid_admin_data = [];
      foreach ($admin_data as $key => $value) {
          if (is_array($value) && count($value) > 1) {
              $valid_admin_data[$key] = $value;
          }
      }
      

      我还建议您再次阅读foreach documentation。另外,与变量的名称保持一致,因为这有助于避免误解:例如,foreach ($admin_data as $key) 最好命名为foreach ($admin_data as $value),因为使用一个变量,您可以提取当前项目的值。

      【讨论】:

        猜你喜欢
        • 2017-11-17
        • 2012-12-27
        • 1970-01-01
        • 1970-01-01
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多