【问题标题】:Filter array where key value equals as string with PHP使用PHP过滤键值等于字符串的数组
【发布时间】:2020-07-07 17:40:48
【问题描述】:

您好,我正在尝试重建键类别 = DESKTOPS 的数组。 这是我的数组的一个示例: $dummyData['data'][$counter] = array('item' => $A, 'ff' => $B, 'proc' => $C, 'mfgr' => $D, 'category' => $E, 'purchaseCost' => $F, 'qty' => $G);

我的数组看起来像这个例子:

<?php
$data =
array (
5 => 
    array (
      'item' => '600 G1',
      'ff' => 'SFF',
      'proc' => 'i5',
      'mfgr' => 'HP',
      'category' => 'DESKTOPS',
      'purchaseCost' => '$56.00',
      'qty' => '4',
    ),
    6 => 
    array (
      'item' => '90W ADAPTER',
      'ff' => '',
      'proc' => '',
      'mfgr' => 'DELL',
      'category' => 'ACCESSORIES',
      'purchaseCost' => '$10.00',
      'qty' => '1',
    ),
),
);
?>

在 PHP 中,我如何过滤 'category' =&gt; 'DESKTOPS' 上的这个数组,只在新数组中显示 DESKTOPS?

这是我尝试过的:

foreach ($dummyData as $key => $desktops) {
         foreach(desktops as $desktop) {

           if($desktop[category] =="DESKTOPS"){
             // add to new array
             $DESKTOPS[] = array('item' => $desktop[item],'ff' => $desktop[ff],'proc' => $desktop[proc],'mfgr' => $desktop[mfgr],'category' => $desktop[category],'purchaseCost' => $desktop[purchaseCost],'qty' => $desktop[qty]);
           }

           }
}

但只返回这个空数组:

Array Dump:
<?php
$data =
array (
);
?>

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    使用array_filter() 过滤您的数组:

    <?php
    
    $data = array (
    5 => 
        array (
          'item' => '600 G1',
          'ff' => 'SFF',
          'proc' => 'i5',
          'mfgr' => 'HP',
          'category' => 'DESKTOPS',
          'purchaseCost' => '$56.00',
          'qty' => '4',
        ),
    6 => 
        array (
          'item' => '90W ADAPTER',
          'ff' => '',
          'proc' => '',
          'mfgr' => 'DELL',
          'category' => 'ACCESSORIES',
          'purchaseCost' => '$10.00',
          'qty' => '1',
        ),
    );
    
    function desktopsOnly($var) {
        return $var['category'] == "DESKTOPS";
    }
    
    $arrayDesktops = array_filter($data, "desktopsOnly");
    print_r($arrayDesktops);
    

    将打印出来:

    Array
    (
        [5] => Array
            (
                [item] => 600 G1
                [ff] => SFF
                [proc] => i5
                [mfgr] => HP
                [category] => DESKTOPS
                [purchaseCost] => $56.00
                [qty] => 4
            )
    )
    

    【讨论】:

    • 确实如此。当我将它应用到我的数组 $dummyData 时,我得到一个空白数组。唔。丢了哈哈
    • 这是我构建阵列的方式:3v4l.org/FNmV2
    • 在您的脚本中,$data 是您在问题中发布的$data 数组吗?或者你从哪里得到的?
    • 使用此链接了解数组的构建方式和转储方式:codeshare.io/5PxZDe 数组在 $Dummydata 中
    • 好的,这是工作代码:3v4l.org/0blSM(我缩短了您的代码共享数据)不确定您为什么需要组装您的 $dummyData 数组。一件事:你的代码共享中的$data 有一个子数组data,所以你需要在array_filter() 中使用$data['data']
    猜你喜欢
    • 2021-12-11
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2017-03-27
    • 2019-04-04
    • 2012-02-09
    • 2019-12-30
    相关资源
    最近更新 更多