Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取数组的两个值之间的数组_Php_Arrays - Fatal编程技术网

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));