2016-12-23 4 views
0

Как извлечь значение [p_id] и передать в качестве аргументов функцию?php извлечь значение из массива и перейти к функции в качестве аргументов

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 
     ) 

) 

, например, мне нужно эти идентификаторы переходят в функции для SQL заявление:

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

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

    ... 

} 

ответ

2

Пусть $array это ваш двумерным массив, петля над ним и добавить все идентификаторы в другой массив, и передать в качестве аргумента

$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"; 

    ... 
} 
+0

спасибо, но как добавить одинарную кавычку для эти идентификаторы impode? –

+0

Я обновил свой ответ кавычками вокруг строк. Проще говоря, вы добавляете кавычки до и после 'implode()', а затем используете его как часть «клея», как он называется. – Tolios

+1

Если идентификаторы являются целыми числами, им не нужны кавычки. Только если это строки. Однако лучше всего использовать подготовленные заявления. – Tolios

2

использование array_map(), чтобы получить все идентификаторы в $ IdS массив:

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

то вы можете передать массив $ ids в качестве параметра вашей функции.

1

раствор, используя array_column и implode функции:

// $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"; 
    } 

    ... 

} 
1
  1. Во-первых, извлечь из значения из p_id с помощью array_column (то есть: http://php.net/manual/en/function.array-column.php)

    $value = array_column($array, 'p_id'); 
    
  2. то и может передать $ значение в вашей функции

    process($value); 
    
  3. вы взрывать ваш массив внутри функции, прежде чем передать его в SQL

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