Php 如何更改数组项?

Php 如何更改数组项?,php,arrays,Php,Arrays,我有一个包含链接的数组。我正试图切断这些链接的一部分。例如: $array = [ "https://eksisozluk.com/merve-sanayin-pizzaciya-kapiyi-ciplak-acmasi--5868043?a=popular", "https://eksisozluk.com/merve-sanayin-pizzaciya-kapiyi-ciplak-acmasi--5868043?a=popular" ]; 我想更改以下链接: array(2) {

我有一个包含链接的数组。我正试图切断这些链接的一部分。例如:

$array = [
  "https://eksisozluk.com/merve-sanayin-pizzaciya-kapiyi-ciplak-acmasi--5868043?a=popular",
  "https://eksisozluk.com/merve-sanayin-pizzaciya-kapiyi-ciplak-acmasi--5868043?a=popular"
];
我想更改以下链接:

array(2) {
  [0]=>
  string(91) "https://eksisozluk.com/merve-sanayin"
  [1]=>
  string(91) "https://eksisozluk.com/merve-sanayin"
  [2]=>
}

是否有任何可能的方法来编辑数组项

有多种方法。一种方法是迭代项目并使用substr()剪裁它们

$arr=array(“https://eksisozluk.com/merve-sanayin-pizzaciya-kapiyi-ciplak-acmasi--5868043?a=popular",
"https://eksisozluk.com/merve-sanayin-pizzaciya-kapiyi-ciplak-acmasi--5868043?a=popular");
对于($i=0;$i
给定阵列:

$array = [
    "https://eksisozluk.com/merve-sanayin-pizzaciya-kapiyi-ciplak-acmasi--5868043?a=popular",
    "https://eksisozluk.com/merve-sanayin-pizzaciya-kapiyi-ciplak-acmasi--5868043?a=popular"
];
使用(就地修改阵列)。 这次使用正则表达式:

function filter_url(&$item)
{
    preg_match('|(https:\/\/\w+\.\w{2,4}\/\w+-\w+)-.+|', $item, $matches);
    $item = $matches[1];
}

array_walk($array, 'filter_url');
(看到它在工作)

请注意,
filter\u url
通过引用传递第一个参数,如文档中所述,因此对每个数组项的更改都会就地执行并影响原始数组

使用(返回修改后的数组) 只需使用
substr
,因为我们对您的实际需求几乎一无所知:

function clean_url($item)
{
    return substr($item, 0, 36);
}

$new_array = array_map('clean_url', $array);
工作


具体如何过滤数组元素取决于您

这里显示的示例似乎没有意义,因为您将所有元素都设置为完全相同的值。如果知道长度,可以使用
substr
,也可以编写更健壮的正则表达式

由于您的输入数组的所有元素在示例中都是相同的,因此我假设这并不代表您的实际输入


您也可以使用
for
foreach
while
来迭代数组,但是当您使用特定的数组函数来处理这种情况时,这些选项中的任何一个都显得不那么优雅。

数组映射()
将迭代数组,而
for()
foreach()也将迭代数组
loop。然后您可以逐个处理每个条目,并重新分配您想要的任何值。嗨,芭比,欢迎使用堆栈溢出。您可以使用
array\u walk
array\u map
以及
str\u replace
preg\u replace
@Barbie一个更好的解决方案是:-如果计数从36变为36(第二次之前计数的字符数-),则无法工作。请检查此处:-这些方法的良好演示。您可能需要指出,array_walk()需要使用符号
&
来修改该值,并解释这意味着
$item
是一个引用。
function clean_url($item)
{
    return substr($item, 0, 36);
}

$new_array = array_map('clean_url', $array);