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



好吧,我有类似的东西

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

这意味着"A3"和"A4"是没有值的键。

我需要通过一个 foreach 循环来获得$key => $value对。

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

更新:问题已结束。谢谢大家。因为它被写入 没有值的键不是键,而是带有默认整数键的值。因此,如果有人想使用上面的结构,请制作这个

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

的每个元素都有一个键。"A3"和"A4"不是键,它们是具有数字键的元素。如果你var_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)

您可以使用array_filter函数获取带有数字键的元素,并检查键类型(例如,使用帮助is_int函数)

$arr = array(
    "a1" => array("a1b", "a1b"),
    "a2" => array("a2b", "a2b"),
    "a3",
    "a4",
    "a5" => array("a5b", "a5b")
);
$newArr = array_filter($arr, function($key) {
    return is_int($key);
}, ARRAY_FILTER_USE_KEY);

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

你的数组看起来很奇怪,因为你混淆了键和值,如"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 as $key => $value)
  if(is_array($value))
    echo "$key => ", implode(', ', $value), '<br>', 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;

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

最新更新