我正在尝试执行以下操作:
从数组$post_data
...
仅在密钥与提供的列表$my_fields
...
并创建一个只包含匹配数据的新数组。
例如,从$post_data
我想抓取first_name
,last_name
和title
的键/值对,同时忽略user_email
。然后,我想创建一个名为$clean_data
的新数组,其中包含这些键/值对。
下面是我尝试循环遍历$ post_data数组并根据$ my_fields数组拉出匹配项。
// These are the fields I'd like to get from the $post_data array
$my_fields = array(
'first_name',
'last_name',
'title'
);
// This is the raw data. I do not need the 'user_email' key/value pair.
$post_data = array(
'first_name' => 'foo',
'last_name' => 'bar',
'title' => 'Doctor',
'user_email' => 'fb@gmail.com'
);
$clean_data = array();
$counter == 0;
foreach ($post_data as $key => $value)
{
if (array_key_exists($my_fields[$counter], $post_data))
{
$clean_data[$key] = $value;
}
$counter++;
}
// Incorrectly returns the following: (Missing the first_name field)
// Array
// (
// [last_name] => bar
// [title] => Doctor
// )
答案 0 :(得分:2)
不需要循环 - 如果需要,您可以在一行中完成所有操作。这是神奇的功能:
如果您不想修改$ my_fields数组,可以使用array_flip()
为了进一步阅读all other fun,您可以使用数组。
现在MARKY选择了答案,以下是一个例子,说明如何以不同方式完成:
$my_fields = array(
'first_name',
'last_name',
'title'
);
$post_data = array(
'first_name' => 'foo',
'last_name' => 'bar',
'title' => 'Doctor',
'user_email' => 'fb@gmail.com'
);
$clean_data = array_intersect_key($post_data, array_flip($my_fields));
这会产生
array (
'first_name' => 'foo',
'last_name' => 'bar',
'title' => 'Doctor',
)
答案 1 :(得分:0)
你应该使用它。
foreach($post_data as $key=>$value){
if(in_array($key,$my_fields)){
$clean_data[$key]=$value;
}
}
print_r($clean_data);
你正朝着正确的方向努力,只是数组中键的匹配必须采用不同的方式。
答案 2 :(得分:0)
你可以用foreach部分替换它,不需要专柜
foreach ($post_data as $key => $value)
{
if (in_array($key,$my_fields))
{
$clean_data[$key] = $value;
}
}