2016-03-16 13 views
1

我从Asterisk中获取两列的行,并且想要分别处理每行和每列。多行和数组

$showmembers = shell_exec('asterisk -rx "database show QM/Exten" |head -n -1 | sed "s#/QM/Exten/##" | tr -d ":" |while read a b; do echo "$a, $b"; done'); 

这会产生这样的:

1111, 2222 
3333, 4444 
5555, 6666 

让我们把第一列 “号”,第二个 “代理”。 我想在每一行上运行foreach循环,并在每次迭代中分别回显“number”和“agent”值。

我已经得到的最接近的是这个下面:

$showmembers = shell_exec('asterisk -rx "database show QM/Exten" |head -n -1 | sed "s#/QM/Exten/##" | tr -d ":" |while read a b; do echo "$a, $b"; done'); 
$members = explode(PHP_EOL, $showmembers); 
foreach($members as $m) { 
    echo "$m", PHP_EOL ; 
} 

它只是输出这样的:

1996, 3079 
1997, 3001 
1998, 3123 

任何提示吗?

回答

1

运行fillowing代码后,将有2个数组:阵列$numbers与来自第一列号和数组$agents与从第二塔剂编号:

$showmembers = shell_exec('asterisk -rx "database show QM/Exten" |head -n -1 | sed "s#/QM/Exten/##" | tr -d ":" |while read a b; do echo "$a, $b"; done'); 
$members = explode(PHP_EOL, $showmembers); 
$numbers = $agents = array(); 
foreach($members as $m) { 
    $tmp = explode(",", preg_replace('/ /', '', $m)); 
    $numbers = $tmp[0]; 
    $agents = $tmp[1]; 
} 
0

由于球员。虽然我无法让你的两个例子都按照原样工作,但它确实使我更接近于一些有用的东西。
我已经结束了使用下面的代码:

$agents = shell_exec("asterisk -rx 'queue show' |grep Agent |awk '{print $1\" \"$2}' |tr -d '(' |sort |uniq"); 

foreach(explode(PHP_EOL, $agents) as $line) 
{ 
if (preg_match("/Agent/", $line)) { 
$agent = preg_split('/ +/', $line); 
echo "$agent[0] | "; 
echo "$agent[1] <br> "; 
} 
}