【问题标题】:php extract value from array and pass to function as argumentsphp从数组中提取值并作为参数传递给函数
【发布时间】:2016-12-23 10:15:04
【问题描述】:

如何提取[p_id] 值并将其作为参数传递给函数?

Array
(
    [0] => Array
        (
            [p_name] => X-Dot Motorbike Helmet
            [p_id] => 1001
            [p_price] =>  1.60
            [p_alt-variation-1] => Red
        )

    [1] => Array
        (
            [p_name] => Salt and Lemon Candy
            [p_id] => 1002
            [p_price] => 1.20
        )

    [2] => Array
        (
            [p_name] => Romoss Rolink Hybrid Cable
            [p_id] => 1003
            [p_price] => 13.90
        )

)

例如,我需要将这些 id 传递给 SQL 语句的函数:

function process($ids = array('1001','1002','1003')) {

    $sql = "SELECT * FROM tbl WHERE pid IN('1001','1002','1003') GROUP BY categoryId";

    ...

}

【问题讨论】:

    标签: php arrays extract


    【解决方案1】:

    假设$array 是您的二维数组,循环遍历它并将所有 ID 添加到另一个数组,并将其作为参数传递

    $ids = array(); // Declare array which will contain IDs
    foreach ($array as $value) {
        // Loop over array, and get the IDs, put it into your $ids array
        $ids[] = $value['p_id'];
    }
    
    // Pass it as an argument
    process($ids);
    

    然后您需要调整您的查询,因为它目前是静态的。使用implode()将数组变成字符串,像这样

    function process($ids = array() {
        $sql = "SELECT * FROM tbl WHERE pid IN('".implode("', '", $ids)."') GROUP BY categoryId";
    
        ...
    }
    

    【讨论】:

    • 谢谢,但是如何为这些 implode id 添加单引号?
    • 我用字符串周围的引号更新了我的答案。简单地说,就是在implode() 前后加上引号,然后把它当作所谓的“胶水”的一部分来使用。
    • 如果 ID 是整数,则不需要在它们周围加上引号。仅当它们是字符串时。更好的是,只需使用准备好的语句。
    【解决方案2】:

    使用 array_map() 将所有 id 放入 $ids 数组中:

       $ids = array_map(function($v){return $v[p_id];}, $array);
    

    然后您可以将 $ids 数组作为函数的参数传递。

    【讨论】:

      【解决方案3】:

      使用array_columnimplode函数的解决方案:

      // $data is your initial array
      $ids = array_column($data, 'p_id');
      
      function process($ids = []) {
          if (!empty($ids)) {
              $sql = "SELECT * FROM tbl WHERE pid IN(".implode(", ", $ids).") GROUP BY categoryId";
          } 
      
          ...
      
      }
      

      【讨论】:

        【解决方案4】:
        1. 首先使用array_column从p_id中提取值(即:http://php.net/manual/en/function.array-column.php

          $value = array_column($array, 'p_id');
          
        2. 然后你可以将 $value 传递给你的函数

          process($value);
          
        3. 在将数组传递到你的 sql 之前,你在函数中内爆你的数组

          function process($value = array()) {
              $value = "'".implode("', '", $value)."'";
              $sql = "SELECT * FROM tbl WHERE pid IN({$value}) GROUP BY categoryId";
          }
          

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-22
          • 1970-01-01
          • 1970-01-01
          • 2014-12-08
          • 2021-04-13
          • 2020-03-12
          相关资源
          最近更新 更多