【问题标题】:PHP : How to print particular part in the array subscript?PHP:如何打印数组下标中的特定部分?
【发布时间】:2018-01-12 07:47:28
【问题描述】:

我有一个数组结果,

$array =    Array(
[subject] => My Subject
[date] => My Date
[id] => My Id    
[message] => *MESSAGE DESCRIPTION*
            *Parts Needed : **********
            *Year : ******
            *Make : **********
            *Model : *******
            *ADDITIONAL INFORMATION*
            *Body Style : *******
            *Vin# : *******
            *Details : *********
            *Engine Liter : ******
            *Engine Size : *********
            *Turbo-Charged : ******
            *Fuel Type : ******
            *Transmission Type : *********
            *CONTACT INFORMATION*
            *Name : *********
            *Address : *********
            *City : ******
            *State : *******
            *Zip : ******
            *Phone : ************
            *Email : *********

)

$msgArr = explode(PHP_EOL, $array);
$msgArr = array_filter( $msgArr );
$msgArr = array_values( $msgArr );
for ( $i = 0; $i < count( $msgArr ) - 1 ; $i += 2 ) {
    $final[ trim( $msgArr[ $i ] ) ] = trim( $msgArr[ $i + 1 ] );
}
echo $final['*MESSAGE DESCRIPTION*'];

在此回显语句中,消息描述显示为未定义索引。如何执行最终数组的结果?

【问题讨论】:

  • 你可以试试 print_r($array);我想查看消息描述结构'
  • 消息属性中是否有分隔符?例如"这是 desc这是 info*这是 concat" ?
  • StackOverflow 上的所有问题都需要编码尝试和预期结果。请通过编辑改进您的问题。 StackOverflow 不是免费的编码服务。我可以通过preg_match() 电话回答这个问题,但您的问题还没有资格获得答案。
  • 如果我不知道数据的长度,我该如何处理?因为每次都会变得不一样。消息是邮件的一部分。我猜不出长度
  • 你所说的“部分”是什么意思。哪一部分,什么是某种消息格式?您必须提供更多信息

标签: php arrays printing


【解决方案1】:

你可以使用这个模式:/\*MESSAGE DESCRIPTION\*\s+\K.*?:.*(?:\s+.*?:.*)*/

Pattern Demo

代码:(Demo)

$array=[
    'subject'=>'My Subject',
    'date'=>'My Date',
    'id'=>'My Id',
    'message'=>'*MESSAGE DESCRIPTION*
*Parts Needed : **********
*Year : ******
*Make : **********
*Model : *******
*ADDITIONAL INFORMATION*
*Body Style : *******
*Vin# : *******
*Details : *********
*Engine Liter : ******
*Engine Size : *********
*Turbo-Charged : ******
*Fuel Type : ******
*Transmission Type : *********
*CONTACT INFORMATION*
*Name : *********
*Address : *********
*City : ******
*State : *******
*Zip : ******
*Phone : ************
*Email : *********'
];
echo preg_match('/\*MESSAGE DESCRIPTION\*\s+\K.*?:.*(?:\s+.*?:.*)*/',$array['message'],$out)?$out[0]:'';

输出:

*Parts Needed : **********
*Year : ******
*Make : **********
*Model : *******

解释:

  • 匹配*MESSAGE DESCRIPTION*(使用\ 使正则表达式从字面上解释*。)
  • 匹配换行符
  • \K 表示从这里开始“全字符串匹配”。
  • 惰性匹配,直到找到冒号,然后匹配该行的其余部分。
  • 重复这部分模式零次或多次。
  • 该模式与下一个标题行不匹配,因为标题中没有冒号。

查看我的模式演示,了解我的模式的正式细分。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    相关资源
    最近更新 更多