Php 获取数组的两个值之间的数组
我正在处理一个数组,我想得到数组两个值之间的所有数组,例如Php 获取数组的两个值之间的数组,php,arrays,Php,Arrays,我正在处理一个数组,我想得到数组两个值之间的所有数组,例如 $fields = array( 'a' => array( 'name' => 'username', 'type' => 'text', ), 'b' => array( 'name' => 'birthday', 'type' => 'text', ), 'c' => array( 'name' => 'address', 'type' =>
$fields = array(
'a' => array(
'name' => 'username',
'type' => 'text',
),
'b' => array(
'name' => 'birthday',
'type' => 'text',
),
'c' => array(
'name' => 'address',
'type' => 'text',
),
'd' => array(
'name' => 'password',
'type' => 'text',
),
);
因此,给定用户名
和密码
我想得到以下信息
'b' => array(
'name' => 'birthday',
'type' => 'text',
),
'c' => array(
'name' => 'address',
'type' => 'text',
),
只是因为它位于username值的数组之后,password值的数组之前
谢谢
如果你想要b,c数组,从你刚才的字段
echo $fields[b][name];
echo $fields[b][type];
echo $fields[c][name];
echo $fields[c][type];
简单地循环两个条件,如下所示
$start = "username";
$end = "password";
$new = array();
$flag = false;
foreach($fields as $key=>$value){
if($value["name"] == $start){
$flag = true;
continue;
}
if($value["name"] == $end){
break;;
}
if($flag){
$new[$key] = $value;
}
}
print_r($new);
现场演示:您可以将
名称
值提取到一个数组中,搜索该数组并使用搜索结果位置进行切片:
$names = array_column($fields, 'name');
$result = array_slice($fields, $i=array_search('username', $names)+1,
array_search('password', $names)-$i);
你自己试图解决这个问题的方法是什么?你是想得到“b”和“c”吗?这无助于回答这个问题,虽然它确实运行了,但你真正想引用的是
“b”
,“c”
,“name”
,和“type”
。(当前代码将针对每个未定义的常量发出警告。)哇,对不起。你是对的。我投票支持一个优雅的解决方案,但由于array\u slice
的第三个参数是长度而不是索引,因此您应该更新以下内容的答案:$names=array\u column($fields,'name')$偏移量=数组搜索('username',$names)$结果=数组\u切片($fields,$offset+1,数组\u搜索($password',$names)-$offset-1);打印(结果)代码>这样,如果“用户名”不在第一个单元格中,代码也会工作。确定。尝试在此数组上运行此代码:$fields=array('0'=>array('name'=>'other','type'=>'text',),'a'=>array('name'=>'username','type'=>'text',),'b'=>array('name'=>'birth','type'=>'text',),'c'=>array('name'=>'address','type'=>'text',),'d'=>array('name'=>'password','type'=>'text',),);
@hthell如果您偏离OPs数组结构,那么是的,但是因为它很简单,我编辑过。
$names = array_column($fields, 'name');
$result = array_slice($fields, $i=array_search('username', $names)+1,
array_search('password', $names)-$i);
function getArraysBetweenNames($name1, $name2, $array)
{
$return = [];
$foundName1 = false;
foreach ($array as $key => $item) {
if ($foundName1) {
if ($item["name"] == $name2)
break;
$return[$key] = $item;
} elseif ($item["name"] == $name1) {
$foundName1 = true;
}
}
return $return;
}
print_r(getArraysBetweenNames("username", "password", $fields));