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

PHP mixed associative array how to get values in foreach loop

嗯,我有类似的东西

$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 function and checking of key type (for example with help 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;
  }
}

为什么不将 "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 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;