PHP混合关联数组如何在foreach循环中获取值

PHP混合关联数组如何在foreach循环中获取值,php,arrays,associative,Php,Arrays,Associative,我有点像 $Arr1 = array("a1" => array("a1b", "a1b"), "a2" => array("a2b", "a2b"), "a3", "a4", "a5" => array("a5b", "a5b") ); 我需要通过一个foreach循环来获得$key=>$value对和唯一一个没有值的键 应该是检查isset($value)的东西

我有点像

$Arr1 = array("a1" => array("a1b", "a1b"),
              "a2" => array("a2b", "a2b"),
              "a3",
              "a4",
              "a5" => array("a5b", "a5b")
);
我需要通过一个foreach循环来获得
$key=>$value
对和唯一一个没有值的键

应该是检查isset($value)的东西,但它不起作用

注意:我不知道钥匙,因此无法直接调用
$Arr1[“a3”]

更新: 问题结束了。谢谢大家。正如所写的,不带值的键不是键,而是带默认整数键的值。所以,如果有人想使用上面的结构,就做这个

 foreach ($Arr1 as $key => $value) { 
      if (is_int($key)) { 
           $key = $value; 
           $value = null; 
      } 
      //using $key and $value
 }

数组的每个元素都有一个键。“a3”和“a4”不是键,它们是具有数字键的元素。如果对该数组进行
var\u dump
,请确保

array (size=5)
  'a1' => 
    array (size=2)
      0 => string 'a1b' (length=3)
      1 => string 'a1b' (length=3)
  'a2' => 
    array (size=2)
      0 => string 'a2b' (length=3)
      1 => string 'a2b' (length=3)
  0 => string 'a3' (length=2)
  1 => string 'a4' (length=2)
  'a5' => 
    array (size=2)
      0 => string 'a5b' (length=3)
      1 => string 'a5b' (length=3)
您可以使用函数和键类型检查(例如,使用帮助函数)获取具有数字键的元素

foreach
语句:

$arr = array(
    "a1" => array("a1b", "a1b"),
    "a2" => array("a2b", "a2b"),
    "a3",
    "a4",
    "a5" => array("a5b", "a5b")
);

$newArr = [];
foreach ($arr as $key => $value) {
  if (is_int($key)) {
      $newArr[] = $value;
  }
}

数组的每个元素都有一个键。“a3”和“a4”不是键,它们是具有数字键的元素。如果对该数组进行
var\u dump
,请确保

array (size=5)
  'a1' => 
    array (size=2)
      0 => string 'a1b' (length=3)
      1 => string 'a1b' (length=3)
  'a2' => 
    array (size=2)
      0 => string 'a2b' (length=3)
      1 => string 'a2b' (length=3)
  0 => string 'a3' (length=2)
  1 => string 'a4' (length=2)
  'a5' => 
    array (size=2)
      0 => string 'a5b' (length=3)
      1 => string 'a5b' (length=3)
您可以使用函数和键类型检查(例如,使用帮助函数)获取具有数字键的元素

foreach
语句:

$arr = array(
    "a1" => array("a1b", "a1b"),
    "a2" => array("a2b", "a2b"),
    "a3",
    "a4",
    "a5" => array("a5b", "a5b")
);

$newArr = [];
foreach ($arr as $key => $value) {
  if (is_int($key)) {
      $newArr[] = $value;
  }
}

为什么不将“a3”和“a4”的值设置为空数组(=>array()?
然后,您可以循环并使用“ax”键访问这些值。在循环中处理数据,但数组为空。

为什么不将“a3”和“a4”的值设置为空数组(=>array()”)?
然后,您可以循环并使用“ax”键访问这些值。在循环中处理数据,但数组是空的。

您的数组看起来很奇怪,因为您混淆了键和值,如“a”。这相当于:

$Arr1 = array
(
  "a1" => array("a1b", "a1b"),
  "a2" => array("a2b", "a2b"),
  0    => "a3",
  1    => "a4",
  "a5" => array("a5b", "a5b")
);
我猜你是指这个:

$Arr1 = array
(
  "a1" => array("a1b", "a1b"),
  "a2" => array("a2b", "a2b"),
  "a3" => null,
  "a4" => null,
  "a5" => array("a5b", "a5b")
);
然后,您可以使用foreach访问它:

foreach ($Arr1 as $key => $value)
  echo "$key => " .
       ( is_array($value)
           ? implode(', ', $value)
           : $value
       ),
       '<br>', PHP_EOL
  ;
foreach($Arr1作为$key=>$value)
回显“$key=>”。
(是数组($value)
?内爆(“,”,$value)
:$value
),
“
”,PHP_EOL ;
或者,如果您不想要具有空值的键,请执行以下操作:

foreach ($Arr1 as $key => $value)
  if(is_array($value))
    echo "$key => ", implode(', ', $value), '<br>', PHP_EOL;
foreach($Arr1作为$key=>$value)
if(是_数组($value))
echo“$key=>”,内爆(“,”,$value),“
”,PHP_EOL;
或者只是

$filered = array_filter( $Arr1, function($v) { return is_array($v); } );

foreach ( $filered as $key => $sub_array)
  echo $key, ' => ', implode(', ', $sub_array), '<br>', PHP_EOL;
$filered=array_filter($Arr1,函数($v){返回的是_数组($v);});
foreach($key=>$sub_数组)
echo$key,'=>',内爆(',',$sub_数组),'
',PHP_EOL;
您的数组看起来很奇怪,因为您混淆了键和值,例如“a”。这相当于:

$Arr1 = array
(
  "a1" => array("a1b", "a1b"),
  "a2" => array("a2b", "a2b"),
  0    => "a3",
  1    => "a4",
  "a5" => array("a5b", "a5b")
);
我猜你是指这个:

$Arr1 = array
(
  "a1" => array("a1b", "a1b"),
  "a2" => array("a2b", "a2b"),
  "a3" => null,
  "a4" => null,
  "a5" => array("a5b", "a5b")
);
然后,您可以使用foreach访问它:

foreach ($Arr1 as $key => $value)
  echo "$key => " .
       ( is_array($value)
           ? implode(', ', $value)
           : $value
       ),
       '<br>', PHP_EOL
  ;
foreach($Arr1作为$key=>$value)
回显“$key=>”。
(是数组($value)
?内爆(“,”,$value)
:$value
),
“
”,PHP_EOL ;
或者,如果您不想要具有空值的键,请执行以下操作:

foreach ($Arr1 as $key => $value)
  if(is_array($value))
    echo "$key => ", implode(', ', $value), '<br>', PHP_EOL;
foreach($Arr1作为$key=>$value)
if(是_数组($value))
echo“$key=>”,内爆(“,”,$value),“
”,PHP_EOL;
或者只是

$filered = array_filter( $Arr1, function($v) { return is_array($v); } );

foreach ( $filered as $key => $sub_array)
  echo $key, ' => ', implode(', ', $sub_array), '<br>', PHP_EOL;
$filered=array_filter($Arr1,函数($v){返回的是_数组($v);});
foreach($key=>$sub_数组)
echo$key,'=>',内爆(',',$sub_数组),'
',PHP_EOL;
ISSET不起作用-它是ISSET另一个注意事项:a3不是一个键,而是一个值,因为它没有标签。您的预期输出是什么?如果您不知道答案或不理解,请不要写任何东西。这里根本不需要你的“WTF”。找到另一个社交媒体。顺便说一句,马克西姆·费多洛夫已经给出了一个正确的答案,如果你感兴趣的话,这个答案是有效的。我不是一个以英语为母语的人,现在我明白了这是一种常见的语言,比如“哦,嘘…”、“哦,该死”,因为它几乎在任何场合都会被说/写,而不是被个人称呼。我的美国朋友不只是每天这样做一次。:)ISSET不起作用-它是ISSET另一个注意事项:a3不是一个键,而是一个值,因为它没有标签。您的预期输出是什么?如果您不知道答案或不理解,请不要写任何东西。这里根本不需要你的“WTF”。找到另一个社交媒体。顺便说一句,马克西姆·费多洛夫已经给出了一个正确的答案,如果你感兴趣的话,这个答案是有效的。我不是一个以英语为母语的人,现在我明白了这是一种常见的语言,比如“哦,嘘…”、“哦,该死”,因为它几乎在任何场合都会被说/写,而不是被个人称呼。我的美国朋友不只是每天这样做一次。:)我明白,但那正是我想要避免的。我明白,但那正是我想要避免的。非常感谢。我对每个($Arr1 as$key=>$value){if(is_numeric($key)){$key=$value;$value=null;}//使用$key}也有同样的看法。非常感谢。我在foreach($Arr1 as$key=>$value){if(is_numeric($key)){$key=$value;$value=null;}//使用$key}得到了相同的结果