【问题标题】:Comma separated string to associative array in PHP逗号分隔的字符串到PHP中的关联数组
【发布时间】:2016-12-29 11:07:08
【问题描述】:

我有一个这样的字符串-

$string = 'Apple, Orange, Lemone';

我想把这个字符串变成 ::

$array = array('apple'=>'Apple', 'orang'=>'Orange', 'lemone'=>'Lemone');

如何做到这一点

我用过这样的explode函数

$string = explode(',', $string );

这给了我这个- 数组( [0] => 苹果 [1] => 猩猩)

有人说这个问题是这个 SO 问题的重复:How can I split a comma delimited string into an array in PHP?

那个问题没有解决我的问题,我已经得到了那个问题的答案,请阅读我的问题。我需要更改该结果 arry 的键值。见

Array
(
    [0] => 9
    [1] => admin@example.com
    [2] => 8
)

喜欢这个

Array
(
    [9] => 9
    [admin@example.com] => admin@example.com
    [8] => 8
)

【问题讨论】:

  • 爆炸将是一个好的开始
  • @Dagon 我已经用过explode,看看我编辑的问题
  • 使用 array_flip 将值更改为键
  • @SalihK 只需在explode 之后使用array_combine,如下所述:)

标签: php arrays


【解决方案1】:

你可以试试:

$string = 'Apple, Orange, Lemone';
$string = str_replace(' ', '', $string);

$explode = explode(',',$string);

$res = array_combine($explode,$explode);

echo '<pre>';
print_r($res);
echo '</pre>';

或者,如果您需要为结果数组设置小写键,请使用以下内容:

echo '<pre>';
print_r(array_change_key_case($res,CASE_LOWER));
echo '</pre>';

【讨论】:

  • 你不需要调用两次explode
  • 此解决方案为您提供与值相同大小写的数组键。该问题指定了小写数组键。
【解决方案2】:
<?php 
$string = 'Apple, Orange, Lemone'; // your string having space after each value
$string =str_replace(' ', '', $string); // removing blank spaces
$array = explode(',', $string );
$final_array = array_combine($array, $array);
$final_array = array_change_key_case($final_array, CASE_LOWER); // Converting all the keys to lower case based on your requiment 
echo '<pre>';
print_r($final_array);

?>

【讨论】:

    【解决方案3】:

    可以使用array_combine、array_values等数组函数

    $string = 'Apple, Orange, Lemone';
    
    $arr = explode(', ', $string);
    
    $assocArr = array_change_key_case(
      array_combine(array_values($arr), $arr)
    );
    

    【讨论】:

    • 那很好。我认为这些键确实应该通过trim() 来删除任何空格。
    • 似乎这是实现结果的更好方法,thanx。
    • array_values() 在这里是一个无用的电话。
    【解决方案4】:
    <?php
    $string = 'Apple, Orange, Lemone';
    $array = explode(', ', $string);
    print_r($array);
    

    输出将是

    Array
    (
        [0] => Apple
        [1] => Orange
        [2] => Lemone
    )
    

    现在

    $ar = array();
        foreach ($array as $value) {
            $ar[$value] = $value;
        }
    
    print_r($ar);
    

    你的愿望输出:

    Array
    (
        [Apple] => Apple
        [Orange] => Orange
        [Lemone] => Lemone
    )
    

    【讨论】:

      【解决方案5】:
      $valuesInArrayWithSpace = explode("," $string);
      
      $finalArray = [];
      
      foreach ($ValuesInArrayWitchSpace as $singleItem) {
      
          $finalArray[trim(strtolower($singleItem))] = trim($singleItem);
      } 
      

      【讨论】:

      • 为什么trim() 每次迭代两次相同的值?为什么不直接用逗号分隔呢?
      【解决方案6】:

      这样你就会得到你需要的东西:

      $lowerString = strtolower($string);
      $values = explode(', ', $string);
      $keys   = explode(', ', $lowerString);
      $array  = array_combine($keys, $values);
      print_r($array);
      

      【讨论】:

      • 这种方法会丢弃字符串大小写数据,而不是将其保留在值中。
      【解决方案7】:

      或者……

      $csvdata = str_getcsv('Apple,Orange,Lemone');
      $arr = [];
      
      foreach($csvdata as $a) {
          $arr[strtolower(trim($a))] = $a;
      }
      
      print_r($arr);
      

      【讨论】:

        【解决方案8】:

        使用 array_flip 将值更改为 key 并使用 array_combine

        <?php
             $string = 'Apple, Orange, Lemone';
             $array = explode(', ', $string);
        
             $new_array =array_flip($array);
             $final_array = array_combine($new_array,$array)
             print_r($final_array );
        
        ?>
        

        【讨论】:

        • 这会给你 Array ([Apple] => 0 [Orange] => 1 [Lemone] => 2)
        • 这个 sn-p 不仅缺少分号,而且没有提供所需的输出。 3v4l.org/AZ9V4 如果这是所需的输出,您只需调用 explode() 并完成它。可以安全地删除此答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        • 1970-01-01
        • 2023-01-23
        • 2023-03-29
        • 1970-01-01
        • 2012-10-30
        • 1970-01-01
        相关资源
        最近更新 更多