【问题标题】:PHP mixed associative array how to get values in foreach loopPHP混合关联数组如何在foreach循环中获取值
【发布时间】:2019-01-15 11:02:51
【问题描述】:

我有类似的东西

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

【问题讨论】:

  • issset 不起作用 - 它是 isset
  • 另一个注意事项:a3 不是键,而是值,因为它没有标签
  • 你的预期输出是什么?
  • @Quasimodo 的克隆如果你不知道答案或不明白,不要写任何东西。这里根本不需要你的“WTF”。为此寻找另一个社交媒体。顺便说一句,Maxim Fedorov 已经给出了一个正确的答案,如果你有兴趣的话。
  • 如果您感到受到侮辱,我深表歉意。我不是以母语为母语的人,现在我明白像“哦,嘘..”,“哦该死”这样的普通话,因为它在任何情况下几乎在任何地方都可以说/写,而不是针对个人。我的美国朋友不仅每天这样做一次。 :)

标签: php arrays associative


【解决方案1】:

数组的每个元素都有一个键。 “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;
  }
}

【讨论】:

  • 非常感谢。我遇到了同样的事情 foreach ($Arr1 as $key => $value) { if (is_numeric($key)) { $key = $value; $值=空; } //使用 $key }
【解决方案2】:

您的数组看起来很奇怪,因为您混淆了“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;

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我明白,但这是我想避免的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2016-10-31
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多