簡體   English   中英

在 php 中將 2 個逗號分隔的列表合並為一個

[英]combine 2 comma separated list into one in php

我有 2 個來自數據庫的 arrays, [options]列有逗號分隔的值。

Array
(
    [0] => Array
        (
            [id] => 143
            [menu_id] => 590
            [name] => bread
            [options] => small, large
        )

    [1] => Array
        (
            [id] => 144
            [menu_id] => 590
            [name] => jam
            [options] => mango, orange, grape
        )

)

有沒有辦法在[0][1]處組合[options]列表?

示例small, large, mango, orange, grape

方法

 <?php foreach ($menu_options as $key => $menu_option) : ?>  
     <?PHP $exploded_variant_options = explode(',', $menu_option['options']);
           foreach ($exploded_variant_options as $exploded_variant_option) : ?>
                     <?php echo ucfirst(sanitize($exploded_variant_option)); ?> //print one by one
                             
          <?php endforeach; ?>
  <?php endforeach; ?>

我的建議是使用array_merge 代碼如下所示:

<?php
    $all_options = [];
    foreach( $menu_options as $key => $menu_option ) {
        $all_options = array_merge($all_options, explode(", ", $menu_option["options"]));
    }
?>

如果這是你的數組:

    $arrays = array (
                array( 'id' => 143, 'menu_id' => 590, 'name' => 'bread', 'options' => 'small,large'),
                array( 'id' => 144, 'menu_id' => 590, 'name' => 'jam', 'options' => 'mango,orange,grape')
         );

您可以使用 array_map 來實現:

    function spliter($key, $value){
       if($key == 'options')
          return $value =  explode(',', $value);
       else
          return $value;
    }          
    foreach($arrays as &$array)
        $array = array_map( 'spliter' , array_keys($array), $array);

那么這將是您的$arrays的轉儲:

array(2) {
  [0]=>
  array(4) {
    [0]=>
    int(143)
    [1]=>
    int(590)
    [2]=>
    string(5) "bread"
    [3]=>
    array(2) {
      [0]=>
      string(5) "small"
      [1]=>
      string(5) "large"
    }
  }
  [1]=>
  &array(4) {
    [0]=>
    int(144)
    [1]=>
    int(590)
    [2]=>
    string(3) "jam"
    [3]=>
    array(3) {
      [0]=>
      string(5) "mango"
      [1]=>
      string(6) "orange"
      [2]=>
      string(5) "grape"
    }
  }
}

如果您只想打印出所有選項(插入順序)而不進一步修改它們,您也可以這樣調用:

<?php

$arr = [
    ['id' => 143, 'menu_id' => 590, 'name' => 'bread', 'options' => 'small, large'],
    ['id' => 144, 'menu_id' => 590, 'name' => 'jam', 'options' => 'mango, orange, grape']
];

var_dump(array_reduce(array_column($arr, 'options'), function ($c, $i) {
    return $c ? "${c}, ${i}" : $i;
}));

// prints: string(34) "small, large, mango, orange, grape"

?>

否則,我建議使用“Teodor”所示的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM