我使用foreach
循环下面的数组,然后将订单号存储在数据库中,
$items_variable = array(
'page_id',
'page_content_1',
'page_content_2',
'page_content_3',
'page_content_4',
...
);
代码只循环上面数组中的4个项目(但如果我将来会增加这些page_content_#
怎么办?)
foreach( $items_variable as $item_variable )
{
if (in_array($item_variable, array(
'page_content_1',
'page_content_2',
'page_content_3',
'page_content_4'
)))
{
if($item_variable == 'page_content_1') $order_in_page = 1;
if($item_variable == 'page_content_2') $order_in_page = 2;
if($item_variable == 'page_content_3') $order_in_page = 3;
if($item_variable == 'page_content_4') $order_in_page = 4;
....
}
}
我上面的当前方法对我来说并不好看,尤其是涉及到这样的一行时,
if($item_variable == 'page_content_1') $order_in_page = 1;
当我将来page_content_#
增加时,我会添加更多这样的行,而且我认为脚本看起来很难看。
如果我有其他类型的订单号数据(例如 - code_1
,code_2
等)怎么办?然后我复制上面的代码并每次更改项目名称 - 这看起来很阴沉不是!
如何让它变得更好动态?
答案 0 :(得分:3)
你可以这样做:
$items_definitions = array(
'page_content_1' => 1,
'page_content_2' => 2,
'page_content_3' => 3,
'page_content_4' => 4,
'page_content_5' => 5,
);
foreach( $items_variable as $item_variable ){
if( isset( $items_definitions[ $item_variable])){
$order_in_page = $items_definitions[ $item_variable];
}
...
}
或者完全动态地假设它总是page_content_{$order_in_page}
,或者建议使用regexp hackartist或者使用“oldschool方法”:
$prefix = 'page_content_';
foreach( $items_variable as $item_variable ){
if( strncmp( $item_variable, $pregix, strlen( $prefix))){
continue; // Assume that you don't want to do anything if it doesn't match
}
$page = intval( substr( $item_variable, strlen( $prefix)));
if( !$page){
continue;
}
$order_in_page = $page;
}
我建议从intval()
文档中学习示例:)
Switch
声明Php提供了一个开关,允许您使用相对少量的代码处理许多不同的情况。
foreach( $items_variable as $item_variable ){
switch( $item_variable){
case 'page_content_1':
$order_in_page = 1;
break;
case 'page_content_2':
$order_in_page = 2;
break;
case 'page_content_3':
$order_in_page = 3;
break;
...
default:
}
}
但是,只有当前两个选项无法解决时,我才会这样做(例如,你需要为每个案例调用不同的函数)。
答案 1 :(得分:2)
不确定你想要什么,但尝试这个而不是if语句:
preg_match('/page_content_([0-9]+)/',$item_variable,$matches);
$order_in_page = $matches[1];
答案 2 :(得分:1)
如果使用显式键将其写出,则当前数组如下所示:
$items_variable = array(
0 => 'page_id',
1 => 'page_content_1',
2 => 'page_content_2',
3 => 'page_content_3',
4 => 'page_content_4',
...
);
请注意,密钥编号与页面内容编号完全匹配。因此,您可以将foreach
循环更改为以下内容:
foreach( $items_variable as $order_in_page => $item_variable )
现在$order_in_page
应该与密钥编号一起存储,密钥编号在您的数组中直接与页面内容编号相关联。您可能需要将其转换为int
,但我不确定这一事实:
$order_in_page = (int) $order_in_page;
相反,如果您的数组看起来如下(没有'page_id'
元素):
$items_variable = array(
0 => 'page_content_1',
1 => 'page_content_2',
2 => 'page_content_3',
3 => 'page_content_4',
...
);
执行与上面相同的操作,但在结果中添加一个:
++$order_in_page;
如果需要施法,则在增量之前施放。
答案 3 :(得分:1)
我不确定我理解你的问题,但是关联数组可能是你的解决方案。您可以使用它将字符串与值匹配:
$order_in_page = array(
'page_content_1' => 1,
'page_content_2' => 2,
'page_content_3' => 3,
'page_content_4' => 4,
'someotherpage' => 5,
'yet_another_page' => 6
);
$o = $order_in_page[$item_variable];
答案 4 :(得分:1)
foreach($items_variable as $item_variable) {
preg_match('/[0-9]*$/',$item_variable , $suffix);
$suffix = $suffix[0];
if ($suffix !== '') {
# code 1
} else {
# code 2
}
}
答案 5 :(得分:0)
我不确定我是否理解您的问题,但您可能希望将数据存储在多维数组中,例如:
$items_variable = array(
'page_id',
'content' => array(
//content
)
);
然后你可以遍历每个内容数组,例如:
foreach($items_variable['content'] as $content) {
//do stuff with the content
}
不需要正则表达式或其他东西。