【问题标题】:Extract a part of keys values in array php提取数组php中的部分键值
【发布时间】:2013-05-06 09:27:03
【问题描述】:

由于某种原因,我有一个这样的数组,我想提取每个键的前 2 部分,一些键包含 5 个由 '' 分隔的字符串,而另一些包含 2 个由 y a 分隔的字符串',' 例如:

array (
    'kksgzgg , kdhdhk',
    'jjj , jjd , jsjs , sjsj , jjsjs',
    'kksksk , kdkdkk',
    'jjj , jjd , jdjdjdj , jjd , jdjdjddj',
    'jjj , jjd , jdjdj , jjsj , sjsjsj',
    'jjj , jjd'
);

我需要这样的结果,每个键中只有 2 个元素(用逗号分隔):

Array ( 
    [0] => kksgzgg , kdhdhk 
    [1] => jjj , jjd  
    [2] => kksksk , kdkdkk  
    [3] => jjj , jjd  
    [4] => jjj , jjd  
    [5] => jjj , jjd  
) 

感谢您的帮助

【问题讨论】:

    标签: php arrays extract


    【解决方案1】:

    您可以使用以下功能:

    示例:

    $newArray = array();
    foreach ($oldArray as $value) {
        $newArray[] = implode(',', array_slice(explode(',', $value, 3), 0, 2));
    }
    
    print_r($newArray);
    

    输出:

    Array
    (
        [0] => kksgzgg , kdhdhk
        [1] => jjj , jjd 
        [2] => kksksk , kdkdkk
        [3] => jjj , jjd 
        [4] => jjj , jjd 
        [5] => jjj , jjd
    )
    

    说明:

    foreach 中的代码可以用临时变量重写,这可能更容易理解发生了什么。下面的代码相当于上面的单行代码:

    $parts         = explode(',', $value, 3);
    $subsetOfParts = array_slice($parts, 0, 2);
    $gluedTogether = implode(',', $subsetOfParts);
    $newArray[]    = $gluedTogether;
    

    这四行在foreach 期间一一应用于数组中的所有值。假设我们正在为此 $value

    'jjj , jjd , jsjs , sjsj , jjsjs'
    

    第一行将用逗号分隔值。第三个参数3 控制您将在$parts 中获得多少元素:

    [0 => 'jjj ', [1] => ' jjd ', [2] => ' jsjs , sjsj , jjsjs']
    

    第二行将从$parts 创建一个新数组,其中只包含第一个和第二个元素,所以结果是

    [0 => 'jjj ', [1] => ' jjd ']
    

    第三行将用逗号将部分子集粘合在一起,所以你得到

    'jjj , jjd'
    

    然后将该字符串添加到$newArray

    【讨论】:

      【解决方案2】:

      我的其他解决方案的替代方法是使用

      示例:

      $newArray = preg_replace(
          '/
              (             # capture any string
                  [^,]*     # that is not a comma
                  ,         # up to a comma
                  [^,]*     # followed by any character not a comma
              )             # into group $1
              .*            # followed by any amount of characters
          /x',
          '$1',
          $oldArray
      );
      

      没有内联文档:

      $newArray = preg_replace('/([^,]*,[^,]*).*/', '$1', $oldArray);
      
      【解决方案3】:

      试试这个:

      $clean_array = array();
      
      foreach($array as $value) {
          $clean_array[] = implode(',', array_slice(explode(',' $value), 0, 2);
      }
      
      echo '<pre>', print_r($clean_array, true), '</pre>';
      

      【讨论】:

        猜你喜欢
        • 2011-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-17
        • 1970-01-01
        • 2018-06-13
        • 1970-01-01
        相关资源
        最近更新 更多