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

时间:2019-01-15 11:02:52

标签: php arrays associative

我有类似的东西

cp

我需要经过一个foreach循环才能获得SftpClient sftpclient = new SftpClient("hostname", "username", "pwd"); string localFilename = FUupload.PostedFile.FileName; string remoteFilename = "/wwabc1/test/folder_one/test/" + Path.GetFileName(filename); using (var fileStream = File.OpenRead(localFilename)) { sftpClient.UploadFile(fileStream, remoteFilename); } 对,并且只有没有值的键。

应该检查$Arr1 = array("a1" => array("a1b", "a1b"), "a2" => array("a2b", "a2b"), "a3", "a4", "a5" => array("a5b", "a5b") ); ,但不起作用。

注意:我不知道按键,因此无法直接调用$key => $value

更新: 问题已关闭。谢谢大家。由于它是写的,没有值的键不是键,而是具有默认整数键的值。因此,如果有人想使用上面的结构,请这样做

isset($value)

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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;

答案 2 :(得分:0)

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